PHP: Zend_Form_Element, il filtro "StringTrim" e il problema della "a" accentata

Dopo aver passato alcune ore a cercare di capire perché un campo di un form creato con Zend_Form visualizzasse bene qualsiasi tipo di carattere tranne la "à" (a accentata), sono finalmente riuscito a scroprire il mistero.
Il problema derivava dal fatto che utilizzavo il filtro "StringTrim" in un modo non corretto. Prima di svelarvi la soluzione al problema, però, vi dò una breve spiegazione.
Le lettere accentate sono codificate in due byte in UTF-8. Il primo byte è sempre xC3 che corrisponde al carattere "Ã" quando viene stampato in una pagina non in UTF-8. Il secondo byte, invece, varia in base alla lettera che deve essere stampata.
Il problema del carattere "à" è che il secondo byte è xA0, che corrisponde allo spazio. Ecco il motivo per cui il problema è dato dal filtro Zend_Filter_StringTrim, che cancellava anche il secondo byte di "à" credendo che fosse uno spazio vero e proprio. Cancellando il secondo byte la stringa veniva rovinata e veniva stampata vuota nelle pagine codificare in UTF-8 oppure con la "a" accentata sostituita dal carattere "?" nelle pagine codificate diversamente.
Per risolvere il problema, si deve specificare al filtro Zend_Filter_StringTrim che si tratta di una stringa in UTF-8.

Partendo da una situazione come questa:
$el = new Zend_Form_Element_Text('nome_campo');
$el->addFilter('StringTrim');


Ho risolto utilizzando il secondo parametro per specificare che si tratta di una stringa codificata in UTF-8:
$el = new Zend_Form_Element_Text('nome_campo');
$el->addFilter('StringTrim', 'UTF-8');

Guida scritta da il 24/04/2012.

Le ultime guide della categoria PHP:

comments powered by Disqus