mercoledì 2 marzo 2016

Come risolvere il problema delle accentate su un sito php con server windows

Sembra incredibile, ma nel 2016 ci sono ancora siti che hanno problemi con le lettere accentate ed i caratteri speciali.
Quante volte avete stampato una pagina web ed avete trovato degli strani simboli tipo dei quadrati o dei punti di domanda al posto delle lettere con l'accento?
A me è capitato anche quando ho stampato un documento per rifare il passaporto!

Ma chi sono per giudicare, se poi oggi mi sono trovato io stesso a dover affrontare il problema delle lettere accentate su un sito web che stavo facendo in php? :)


Come risolvere il problema delle accentate su un sito php con server windows


Dopo aver installato easyphp ed aver risolto il fastidioso problema dell'errore Undefined index, eccomi ancora a dover affrontare un nuovo problema: il problema delle lettere accentate che non si visualizzano correttamente.

Cercando su internet ho trovato diverse persone che dicevano che per risolvere il problema delle accentate su un sito fatto in php, bastava mettere negli headers questo metatag:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Fatto, ma niente, non funzionava. Forse perchè quella è la codifica per linux, mentre il mio php è sotto server windows.

Altri proponevano anche questo metodo, direttamente in php:
header('Content-type: text/html; charset=utf-8');
Che però è praticamente la stessa cosa del metodo precedente.

Un altro tentativo vano è stato quello di usare la funzione  htmlspecialchars.
Stampando però a video con la funzione echo, le accentate non apparivano lo stesso.
echo htmlspecialchars("lettere: è ò à ù é");

Anche la funzione htmlentities è stata vana.
echo htmlentities("accentata: è");

Alla fine mi è venuto in mente che tutte le soluzioni che ho letto su internet erano per server linux, mentre sui server windows di solito c'è un charset diverso.

Quindi, per risolvere il problema delle accentate su windows ho cambiato il charset di default nel php.ini.

Aprite quindi il vostro file php.ini e cercate la stringa default_charset.
Dovrete mettere:
default_charset = "iso-8859-1"
Se non dovesse funzionare vuol dire che magari quello non è il charset usato dalla vostra macchina, fate qualche tentativo usando anche altri charset, tipo CP-1252.

Potrebbe anche esser necessario riavviare il webserver (apache o nginx).

Aggiungiamo poi anche il meta tag col giusto charset nell'html della nostra pagina:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Ovviamente questo tag va messo dentro l'header della pagina.

Nel caso abbiate ancora problemi con le accentate (ad esempio importando i dati usando qualche procedura che pesca da fonti con un charset diverso dal vostro), potreste provare a forzare la conversione dei dati acquisiti al vostro charset:
$dati = mb_convert_encoding($dati, "iso-8859-1");

Qui di seguito la videoguida di questo tutorial:
https://youtu.be/XJfM_AyyLNE

Bene, ora potete stampare a video tutte le accentate ed i caratteri speciali che volete :)

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon