Quì ragazzi qualcosa mi sfugge.
Allora, ho iniziato a fare un sito internet tempo fa, nei ritagli di tempo perché facendo come lavoro il programmatore improntato sul web (e non solo) quando torno a casa la sera un pò mi disturba il mettermi a programmare.
Siccome so quanto snervano i charset ho deciso sin dal principio quale adottare: UTF-8.
Le ragioni erano:
Il sito era su Aruba con piattaforma Linux (che come charset di dafault usa UTF-8).
Il sito era fatto in PHP che lavora bene con più charset.
Il database era Mysql, che di dafult usa UTF-8.
Diciamocela, UTF-8 stravince perché è meglio e gran parte dei siti che vedo sono in UTF-8.
Ho creato questo sito blindatissimo, con dei vari sistemi per prevenire l'inserimento di caratteri che potrebbero in un secondo momento risultare mal visti.
Andava tutto benissimo, fino a questa mattina, quando ho iniziato a mettere sul sito il lavoro fatto fino ad ora.
Sulla mia macchina uso PHP 5.2.5
Su Aruba c'è il 4.4.7
Potevo già immaginare che forse qualche piccolo problema di incompatibilità poteva esserci e mi ero rassegnato a questo, ma quello che mi è accaduto ha dell'inverecondo.
Mi esce sulle pagine amministrative questo errore:
Warning: cannot yet handle MBCS in html_entity_decode()!
Allora penso che forse html_entity_decode() non era contemplato dalla versione in uso di PHP, controllo sul sito di www.php.net, dove dice che è implementata dalla versione 4.3 in poi.
"Ma allora sto in regola!"
Cerco sul web.
Trovo una pagina bugs sempre sul sito www.php.net.
Un utente si lamenta della mia stessa cosa.
(traducendo sommariamente dall'inglese)
... ho messo sto codice... mi restituisce questo errore... non capisco...
Risposta loro:
Si, abbiamo riscontrato un bug del PHP quando con questa funzione si tenta di convertire un'entità html in UTF-8, il bug è stato corretto nella versione 5 ma non verrà corretto nelle versioni precedenti....
Cioè, dico, cioè, cioè (un pò come Peter Griffin) cioè, cioè.
Io ho fatto un intero sito, non dico una paginetta, un intero sito in UTF-8 compreso il database e scopro che la funzione centrale che ho utilizzato per garantire una totale sicurezza di non avere problemi con la codifica non funziona, per un bug(!), proprio con la codifica nativa di linux... su un linguaggio nativo del linux...
Allora per essere sicuro ho fatto una prova, ho creato una pagina UTF-8 e salvata in UTF-8 con questo codice all'interno:
Codice PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test UTF-8</title>
</head>
<body>
<?php
echo(html_entity_decode("à",ENT_QUOTES,"UTF-8"));
?>
</body>
</html>
Poi ho creato il corrispettivo in iso-8859-1, creandola e salvandola in iso-8859-1.
Codice PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test ISO</title>
</head>
<body>
<?php
echo(html_entity_decode("à",ENT_QUOTES,"ISO-8859-1"));
?>
</body>
</html>
Bene, nel primo caso mi escono eoni di errori tutti uguali (si, è solo un carattere da convertire ma non si capisce perché esce un bel pò di volte lo stesso errore), nel secondo caso invece esce una bellissima à
Sono avvilito e sconcertato.
Ho passato tutta la mattina a riconvertire il sito e il database in iso-8859-1.
Mi tagliassero le mani la prossima volta che uso UTF-8.