domenica 3 febbraio 2008

Babele

Si narra, nella Bibbia, che un tempo gli uomini, non avendo una fava da fare tutto il giorno dissero: “Ma perché non facciamo una torre bella alta e non andiamo a trovare Dio?”.
Si misero all’opera finché Dio, affacciandosi dal balcone, se ne accorse, visto che aveva ospiti importanti non voleva avere fra i piedi i suoi figli stupidi così li prese a sassate, li centrò tutti in testa (beh, lui era Dio, una gran mira), questi uomini si istupidirono talmente tanto che cambiarono lingua, ognuno ne ebbe una nuova, qualcuno parlava solo con versi gutturali (i mongoli), altri con accenti omosessuali (i francesi), quindi non riuscendo più a capirsi lasciarono perdere la torre e se ne andarono ognuno per i fatti propri, anche perché i francesi guardavano languidamente i mongoli…



Tutto questo preambolo è per introdurre il mio problema del giorno, un problema con un nemico che ho scoperto ormai da quasi due anni e che ho subito capito che sarebbe stato il mio nemico di sempre, dal punto di vista informatico s’intende, perché un nemico già ce l’ho…

I Charset.

Si, i Charset.

Quei cosi che definiscono diversi sistemi di codifica a video per diverse lingue e diverse scritture.

Sono convinto che saranno loro a portarmi alla tomba.

Sono peggio dei Virus di nuova generazione, quelli veri, non quelli informatici, una volta che credi di aver trovato una cura ecco che s’inventano qualcosa di nuovo e comunque te lo “piazzano”.

Dovevo fare un sito, basandomi sul fatto che la piattaforma era Linux, il linguaggio PHP e il database MySql e che tutti e tre insieme gridavano “UTF-8! UTF-8! UTF-8! UTF-8!” allora mi son detto “Ma facciamolo in UTF-8 che viene meglio e poi è compatibilissimo con tutti i sistemi che devo usare”.

Faccio l’intero sito in UTF-8, compreso il Database.

Sapendo che la versione di PHP sul server (Aruba) è un po’ vecchiotta rispetto all’attuale già immaginavo che forse qualcosa poteva andare storta al momento di mettere online il sito.

Questa mattina mi accingo al gravoso compito.

Versione PHP sul mio pc: 5.2.5
Versione PHP su Aruba: 4.4.7

Metto tutto in ordine, carico prima il database, poi le pagine già configurate per il sito, provo e subito caccia un errore.

Non riconosce una funzione che, ahimé, è presente solo dalla versione 5.

La commento perché è di importanza marginale.

Riprovo.

Funziona tutto.

Anche le sessioni e cookies (sensazionale).

Che felicità.



Vado nell’area Amministrativa.

“Warning: cannot yet handle MBCS in html_entity_decode()!”

Ora, cosa cazzo è questo errore?!?

Prendo la funzione html_entity_decode() e controllo sul sito www.php.net, è presente da PHP 4.3, il sito usa la 4.4.7 quindi non vedo dove sta il problema.

Cerco nel web e trovo la risposta (la pagina è sommariamente tradotta dall’inglese).

Sul sito www.php.net:

Un tizio chiede del mio stesso problema.

Gli viene cordialmente risposto che è stato effettivamente riscontrato che sussiste un bug di PHP, utilizzando la funzione html_entity_decode() per codificare un’entità html in UTF-8 genera questo errore.
Il problema è stato risolto nella versione PHP5, non verrà però risolto nelle versioni precedenti…

COME!?!?

Tu mi stai dicendo che io ho uno spazio web con una versione del tuo porco linguaggio che tu non hai più intenzione di correggere perché un po’ vecchietto anche se hai constatato che l’errore è colpa tua?!!?!?

Ma oltretutto, e qui si sfiora la paranoia, l’errore lo da solo con codifica UTF-8, SOLO!

Ricapitoliamo.

Il Server è Linux (Charset di default: UTF-8).
Il linguaggio è PHP (Linguaggio nativo di Linux).
Il Database è Mysql (Charset di Default: UTF-8).
Il Charset maggiormente consigliato per i siti web è: UTF-8.

L’unico Charset che non funziona con quella funzione (che io uso in quasi tutte le pagine del sito) è ovviamente UTF-8, non potevo pensare diversamente.

Se invece avessi usato ISO-8859-1, che è nativo di Windows e non è di default su Linux, su PHP e Mysql non avrei avuto nessun problema, perché con ISO-8859-1 la funzione va benissimo, una crema, ma anche in questo caso non avrei potuto pensare diversamente, ma quanto ne sapeva Murphy con le sue leggi? Quanto stava avanti? Un profeta, altro che Nostradamus.



Morale della favola, sono stato un’intera mattinata a riconvertire database e sito, file per file, in ISO-8859-1, ho dovuto ricontrollare tutto il codice per eventuali problemi e alla fine, finalmente, funziona!

Quanto è bello quando le cose funzionano, ovviamente ci devo sempre perdere più di mezza giornata, altrimenti potrei anche allarmarmi, per il semplice motivo che se qualcosa fa troppo liscio sicuramente c’è qualcos’altro in agguato.

Come sempre, Dio è con me.