L’encodage des paramètres dans les urls

04.12.2008 1

Après plusieurs années de développement, on en apprend toujours, et c’est ca qui fait plaisir dans ce métier. Bien que parfois, il y a des surprises dont on pourrait se passer …

En voici une justement qui m’est arrivée pas plus tard que tout à l’heure: pour un site fraîchement mis en production, un fournisseur veut envoyer une emailing contenant une invitation à jouer pré-remplie avec nom et prénom. Jusque là, rien de sorcier. Sauf qu’au lieu d’encoder correctement l’url, le prénom et le nom de famille des joueurs est transmis tel quel dans un bon vieux « nom=tonton&prenom=rené »

Au sein de mon formulaire d’inscription, je récupère et j’affiche ces valeurs avec un ptit urldecode (inutile dans ce cas là of course) et un html_entities avec charset réglé en UTF-8

Sur certains browser, » tonton rené » devient « tonton ren » suivi d’un carré ou d’un @ selon les cas. Mais uniquement sur PC ! Sous macosx, tout va bien …

Safari et FF version Macosx considèrent donc que les paramètres de l’url sont encodés en UTF8, mais IE6 et FF sous Windows considèrent qu’il s’agit d’ISO. La solution est alors de tester l’encodage des paramètres passés dans l’url et d’utf8_encoder tout ce petit monde s’il ne s’agit pas déjà d’utf8

Au passage, voilà une fonction trouvée sur php.net qui permet de tester ce genre de chose:

function is_utf8($string) {
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[x09x0Ax0Dx20-x7E] # ASCII
| [xC2-xDF][x80-xBF] # non-overlong 2-byte
| xE0[xA0-xBF][x80-xBF] # excluding overlongs
| [xE1-xECxEExEF][x80-xBF]{2} # straight 3-byte
| xED[x80-x9F][x80-xBF] # excluding 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
)*$%xs', $string);
}

Et voilà encore du boulot qui aurait pu être évité si les fournisseurs extérieurs développaient correctement leur business…


 Olivier PIERRE, freelance au Luxembourg Analyste développeur PHP/MySQL/jQuery et administrateur système Linux spécialiste Gentoo


Les messages similaires