var mysite = {
    'url': "http://www.ajaxweb20.net",
    'author': "Giuseppe Raso",
    'xhtmlValid': true,
    'cssValid': true
}
Home > Blog

Archive for the ‘Codifiche’ Category

I misteri dell’UTF-8… Come evitare i mal di testa nell’utilizzo di questo character-set.

Venerdì, Febbraio 15th, 2008

L’UTF-8 è sicuramente il migliore dei character set in cui salvare le proprie pagine web. L’UTF-8 è un sottogruppo dell’unicode e in quanto tale permette di utilizzare una moltitudine di caratteri che la codifica ISO al contrario non supporta.
Non si può però mettere in dubbio che la conversione da una codifica all’altra spesso spiazzi i meno esperti, e a dirla tutta, anche quelli più smaliziati. Il fatto è che finche si lascia la codifica ISO è difficile incorrere in problemi, non a caso questa è la codifica standard delle connessioni http.
Perciò per quelli che sono entrati da poco a contatto con i misteri dell’UTF-8 ho preparato un tutorial passo per passo per convertire delle pagine ISO in pagine UTF-8.

Come faccio a convertire/creare una pagina in UTF-8?
Per avere una pagina in UTF-8 è necessario prima di tutto salvare il file della pagina in UTF-8. In Notepad++ ad esempio basta mettere il segno di spunta su “Formato/Codifica in UTF-8″.
Dopodichè è necessario mettere almeno il meta tag in head che specifica quale character set si sta usando:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Come faccio in PHP a forzare l’utilizzo della codifica UTF-8?
L’espediente di prima potrebbe anche non funzionare se il server è settato male. Per fortuna in php è possibile modificare gli header in modo da forzare il server a restituire la pagina in UTF-8 ( ricordo che gli header possono essere modificati solo prima di mandare dell’output al client ):

<?php header (‘Content-type: text/html; charset=utf-8′); ?>

E’ possibile in PHP convertire un testo da una codifica qualsiasi ad UTF-8?
In php è disponibile la funzione utf8_encode che fa proprio questo. Bisogna stare attenti a utf8_encode: se la stringa passata è già codificata in UTF-8 il risultato potrebbe essere molto diverso da quello che ci si aspetta…

<?php utf8_encode("ààà⌂ǰ°°ùùùùùéééèèèèè"); ?>

Se i dati del mio database sono in un formato diverso dall’UTF-8, come faccio a visualizzarli?
Un modo è ovviamente quello di utilizzare la funzione utf8_encode sulle stringhe che riceviamo dal database. Ma se il database utilizzato è MySql ( sicuramente si può fare anche con Postgree e Oracle ) esiste la possilità di settare una variabile che forza la codifica dei dati passati tra server e client. L’istruzione SET NAMES va usata subito dopo aver selezionato il database.

<?php
mysql_select_db("mydb");
mysql_query("SET NAMES ‘utf8′;");
?>

Esiste un modo per automatizzare l’utilizzo dell’UTF-8?
Si, nel file di configurazione di Apache o nel file .htaccess basta inserire la seguente riga:

AddDefaultCharset UTF-8

Per evitare invece di dover utilizzare ogni volta che ci si collega ad un database SET NAMES basta modificare il file di configurazione di mysql e inserire questa riga:

default-character-set=utf8

E Javascript?
Se dovesse essere necessario passare dei parametri nell’url ( ad esempio in richieste ajax ) è possibile ( necessario ) utilizzare encodeURIComponent. Tale funzione ( purtroppo non compatibile con IE 5 se non usando delle librerie apposite ) codifica correttamente i caratteri speciali in UTF-8. Non fate l’errore di usare escape.

location.href = "http://www.google.it/search?q=" + encodeURIComponent(mySearch);