L’esperluette sauvage

Où l’on apprend qu’une esperluette sauvage ne meurt jamais tout à fait.

Il n’est peut-être pas inutile de rappeller, avant de commencer, ce qu’est une esperluette, que la plupart des développeurs et web designers connaissent mieux sous le nom anglo-international de ampersand.

Voilà, une esperluette c’est ça : &.

Si vous êtes un développeur web expérimenté ou du moins soucieux de respecter les standards du web, vous avez certainement pris l’habitude de transformer toutes vos esperluettes (&) en entités HTML (&). Lorsque vous envoyez du contenu vers votre base de données, vous utilisez une fonction comme htmlspecialchars en PHP, pour ne pas voir une esperluette sauvage pernicieuse polluer votre code et éventuellement faire exploser votre page à la face de vos visiteurs innocents.

Une chaîne originale ressemblant à :

http://www.google.fr/search?hl=fr&q=web+standards&btnG=Recherche+Google

devient dans la base de données :

http://www.google.fr/search?hl=fr&q=web+standards&btnG=Recherche+Google

Cette chaîne est parfaitement valide à la fois pour un parser HTML ou « soupe de balises » (qui peut bouffer n’importe quoi donc ça n’est pas vraiment important) et X(HT)ML (là par contre ça compte). Mais ce genre de chaînes (URL à rallonge) peuvent devenir très longues, et pour les afficher dans un tableau on limitera souvent leur taille à 50 ou 100 caractères selon l’espace d’affichage disponible. Mais que se passe-t-il ici si on tronque cette nouvelle chaîne, au hasard, à 55 caractères ? Très simple la chaîne est à présent :

http://www.google.fr/search?hl=fr&q=web+standards&a

Nous avons à nouveau une esperluette non codée dans le code source et la page est invalide.

Si je vous parle de ça aujourd’hui c’est parce que j’ai rencontré ce problème récemment et que, faute de solution idéale, j’ai décidé de re-coder la chaîne à la sortie (avec htmlspecialchars), ce qui fait que lachaîne affichée est déformée. Mais puique le lien reste entier il n’a pas besoin d’être codé une deuxième fois, et il continue de fonctionner (seul le texte du lien est modifié). Le résultat (source (X)HTML pour le texte du lien) :

http://www.google.fr/search?hl=fr&q=web+standards&a

La chaîne affichée est toujours valide mais le texte est déformé. Si vous connaissez une solution en PHP, je vous écoute, et je posterai la solution ici.

← article précédentarticle suivant →

Les commentaires pour cet article sont fermés.