Concludo con un problema a mio avviso abbastanza fastidioso. E' quello che si verifica quando un utente fa il copia/incolla da documenti Word e simili nella maschera del form. Capita a volte di vedere nella pagina Web dei codici di caratteri tipo: ‘ ’ ecc. Si tratta dei codici estesi di metacaratteri html, nascosti nel copia/incolla e che diventano visibili una volta inviati alla nostra pagina Web. Infatti la codifica dei metacaratteri in Html prevede la seguente forma &#[codice esteso];. Se copiamo un carattere simbolico come questo "" in un form e lo filtriamo con la funzione Htmlspecialchar() o HtmlEntities(), può succedere di vedere comparire nella nostra pagina Web se si usa MSIE 5.5, se invece usiamo Netscape Composer 4.76, non succede e compare un "Y".
Per risolvere questo problema possiamo controllare, attraverso una espressione regolare per esempio, se la variabile $messaggio contiene codifiche di caratteri estesi e in caso positivo togliere la codifica "amp" all'ampersand in questo modo:
if (ereg("&#[0-9]{4,5};",$messaggio)) { $messaggio = str_replace("&#","&#",$messaggio); }
Si tratta di una soluzione molto pedestre. Una soluzione più elegante e impegnativa potrebbe consistere in una tabella di conversione a cui far corrispondere ad ogni codifica numerica, la corrispondente codifica estesa del metacarattere HTML: Utilizziamo quindi la tabella in un array associativo attraverso la funzione PHP srttr() in questo modo:
if (ereg("&#[0-9]{4,5};",$messaggio))
{ $tabella_di_conversione=array
(
"‘" => "‘",
"’" => "’",
"“" => "“",
"”" => "”",
. . . . .
);