Solitamente quando creiamo pagine web con form per l’inserimento di alcuni dati da parte dell’utente, ci troviamo di fronte al problema dei caratteri “speciali”, come le lettere accentate.
Capita spesso che il risultato che vediamo all’interno del nostro browser, sia differente da quello che ci aspettiamo.
Per esempio il carattere “à” (à) potrebbe essere rappresentato sullo schermo come “Ô (Ã). Questo e’ dovuto da un’errata codifica dei caratteri che puo’ avvenire a piu’ livelli.
Il percorso che fa il nostro dato contenente la lettera accentata generalmente e’ il seguente:
1) Inserimento del dato all’interno di un campo di testo (text e textArea) e invio attraverso la request HTTP;
2) Cattura del dato da parte del server (Tomcat) e successiva memorizzazione in una variabile;
3) Scrittura del dato all’interno del database;
4) Presentazione del dato nel browser.
In ognuno di questi quattro passaggi il carattere puo’ venir modificato, se non utilizziamo la giusta codifica dei caratteri.
Quindi per i punti 1) e 4) dobbiamo essere sicuri che il nostro browser utilizzi la codifica dei caratteri giusta. A seconda del browser l’opzione da modificare sara’ in posti diversi.
Per esempio in Firefox su Linux si trova in:
Preferenze di Firefox –> Contenuti –> Caratteri e colori –> Avanzate –> Codifica carattere predefinita.
Per il punto 2) dobbiamo andare a modificare il file server.xml di Tomcat, cercare il Connector che stiamo utilizzando ed aggiungere un parametro URIEncoding che permette al server di recuperare dalla request i caratteri con la codifica corretta.
<Connector port=”8084″ protocol=”HTTP/1.1″
URIEncoding=”UTF-8″
connectionTimeout=”20000″
redirectPort=”8443″
/>
Io qui utilizzo UTF-8, ma voi userete la codifica giusta a seconda del paese in cui vi trovate e del sistema operativo utilizzato.
Se non aggiungete questo parametro rischiate che, indipendentemente dal tipo di metodo che usate per l’invio della richiesta (GET o POST), non appena catturate il dato e lo salvate in una variabile, questo sara’ gia’ stato modificato. Mi spiego meglio. Ho un form di inserimento con un solo campo che si chiama “descrizione” e uso il metodo get per inviarlo.
Nel campo descrizione inserisco : “Problemi con qualche attività” e poi invio.
L’URL che mi si presenta nel browser sara’: http://www.miosito.it/pagina.jsp?descrizione=Problemi+con+qualche+attività – che finora e’ corretto.
Nel momento in cui con Java recupero il valore del parametro con
String descrizione = request.getParameter(“descrizione”);
e con un successivo
System.out.println(“La descrizione è : ” + descrizione);
il risultato che ci si presenta e’ il seguente:
La descrizione è : Problemi con qualche attivitÃ.
Se notate ho inserito una lettera accentata “è” nel codice e il valore di descrizione. Quello che ho inserito io tra i doppi apici si legge correttamente, mentre il valore recuperato dalla request e’ sbagliato.
Per il punto 3) dobbiamo controllare che a livello di database, tabella e ogni singolo campo la codifica sia impostata correttamente. In PHPMyAdmin (molto utile interfaccia web per gestire i vostri DB – se non lo conoscete provatelo!! Sito di phpmyadmin) abbiamo la possibilita’ di scegliere la “collazione” (Collation), e quindi impostarla come preferiamo.
Solitamente la collazione e’ impostata su “latin1_swedish_ci” che comprende anche le lettere italiane, quindi le accentate e solitamente non serve cambiarlo. Se preferite potere impostare “UTF-8_bin” per rendere il DB compatibile al 100% con Tomcat. Questo perche’ nel caso in cui vogliamo salvare caratteri per esempio giapponesi con latin1_swedish_ci non li vedremo e saranno sostituiti con dei punti di domanda.





Commenti Recenti