Qual è il miglior modo per risolvere i problemi di codifica nei moduli che utilizzano più lingue e script?
Il modo migliore per risolvere i problemi di codifica nei moduli HTML consiste nel codificare tutte le pagine in UTF-8. UTF-8 può rappresentare i caratteri della più ampia gamma di lingue. I browser inviano i dati dei moduli nella stessa codifica della pagina contenente il modulo, consentendo all'utente di compilare i dati nella lingua e script desiderati.
Bisogna considerare alcuni punti per garantire il corretto funzionamento di tale procedura. In primo luogo, è importante indicare al browser che la pagina del modulo è in UTF-8. Ci sono vari modi per indicare al browser la codifica della pagina. Questo risulta importante in ogni situazione, ma ancora di più se la pagina del modulo non contiene caratteri che non siano US-ASCII, e gli utenti possono scrivere in altri caratteri.
In secondo luogo, si consiglia che lo script che riceve i dati del modulo verifichi che i dati siano effettivamente in UTF-8 (nel caso in cui venisse riscontrato un errore, ad esempio, la modifica della codifica da parte dell’usuario). Il controllo è reso possibile dal momento che UTF-8 presenta un modello di byte molto specifico assente in qualsiasi altra codifica. In caso di ricezione di dati in un formato diverso da UTF-8, si consiglia di inviare un messaggio di errore.
Ad esempio, in Perl, una valutazione di espressione regolare di UTF-8 potrebbe apparire come indicato di seguito:
$field =~
/\A(
[\x00-\x7F] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # escludendo overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # escludendo surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*\z/x;
Questa espressione può essere adattata ad altri linguaggi di programmazione. Si occupa di varie questioni, come le codifiche illecite lunghe e l'uso illecito di surrogati. Visualizzerete vero se si tratta di UTF-8, e altrimenti falso.
The above regular expression can be tailored by adding application-related restrictions. As an example, many control characters can be excluded by replacing [\x00-\x7F] with [\x09\x0A\x0D\x20-\x7E].