Ciao a tutti!![]()
volevo sottoporvi una questione che ritengo abbastanza interessante
Da un po' creo per comodità (supporto multilingua) tutti i miei siti con utf-8.
Cioè mando in output tutto tramite l'handler del modulo multibyte string.
Per farla semplice così![]()
Naturalmente dichiaro utf-8 anche per l'xml e con il tag meta sull'XHTML.codice:mb_http_output("UTF-8"); ob_start("mb_output_handler");
Tutto funziona molto bene.
Essendo le pagine impostate in utf-8 i form mi vengono restituiti dai browser con la stessa codifica e per restare in tema il charset che imposto su mysql è un bel utf8-general-ci.
Dov'è l'inghippo?
Semplice ma fastidioso.
Quando prelevo dati da mysql mi vengono restituiti (giustamente) in utf-8.
Questo normalmente non sarebbe un problema se non fosse che l'mb_output_handler (ma anche utf8_encode o mb_convert_encoding) se ne fregano se ricevono dell'utf-8 e lo codificano di nuovo..
Risultato?
Ogni volta che prelevo stringhe utf-8 dal database e le devo mandare in output sono costretto a ridurre l'utf-8 nuovamente in iso-8859-* prima di fare un echo.
Questa è la via più "comoda" che ho trovato ma presenta anche delle insidie perchè se si riduce per esempio il simbolo dell'euro da utf-8 a iso-8859-1 (come fa per esempio utf8_decode) viene sostituito con un bel punto di domanda poiche in iso-8859-1 il simbolo dell'euro non è previsto.
Questo naturalmente è solo un esempio.. se riducendo l'utf8 in iso-8859-15 (con mb_convert) si risolve il problema del simbolo euro non si risolve purtroppo il guaio con il cirillico o il cinese.
E' possibile che l'unica via sia interrompere il buffering ad ogni output già codificato in utf8!?
E' assurdo!!
Maledizione a php che ancora non supporta nativamente utf8![]()