domenica 21 giugno 2009

Php e accenti: caratteri strani nei form o da mysql. La codifica Utf8

Indipendentemente da quante volte l'avrò fatto, e ormai sono tante, ci casco sempre e mi scordo di convertire i caratteri dall'Utf8 a Unicode, o a entità HTML.

Il risultato sono lettere accentate che appaiono così: è

Il motivo è che il form, o magari il feed RSS o il database mysql dal quale arriva il testo hanno usato la codifica Utf8, mentre la pagina che le visualizza è in Unicode.

Quindi a futura memoria:

$stringa_da_ripulire='è';
utf8_decode ($stringa_da_ripulire);

Che stampa correttamente 'è'. Possiamo fare un passo in più e scrivere:

htmlentities (utf8_decode ($stringa_da_ripulire));

Che invece di 'è' restituisce è ed è anche una saggia misura di sicurezza per evitare l'inserimento di HTML pericoloso. Soltanto, ricordiamoci di farlo prima di aggiungere i nostri tag html.

Ad esempio, se costruiamo una lista da un feed di twitter, all'interno del ciclo scriveremo qualcosa come:

$testo.='<li>'.htmlentities (utf8_decode ($stringa_da_ripulire)).'</li>';

invece di passare il risultato finale di $testo alle due funzioni. Perché a quel punto perderemmo gli '<li>' costruiti per ogni elemento.

Naturalmente, questo rallenta l'esecuzione perché sono necessarie tante chiamate a funzioni quanti sono gli elementi.

2 commenti:

Unknown ha detto...

finalmente! ecco risolto un difficle problema
Grazie

Unknown ha detto...

finalmente! ecco risolto un bel problema, grazie

Posta un commento