Si vous laissez vos membres écrire des articles ou des commentaires sur votre site, un jour ou l'autre vous serez confrontés aux problème de l'apostrophe Windows.
L'apostrophe Windows ? Quoi qu'est-ce ? En fait, il s'agit de l'apostrophe "jolie", plus courbée que celle qui orne nos claviers, que Word place automatiquement lorsque vous appuyez sur votre apostrophe "standard". Wolfram Alpha nous en dit plus :
- Apostrophe Windows ;
- Apostrophe "standard" .
Dans la suite de cet article, nous étudierons l'origine de ce caractère et les problèmes qu'il entraîne.
Première question à se poser, d'où vient ce caractère étrange qui s'affiche correctement dans une page encodée en ISO-8859-1 alors qu'il ne fait pas partie du jeu de caractères ?
Il faut remonter à l'origine de Windows pour comprendre, quand Microsoft se voit obligé d'implémenter de nouveaux charsets pour couvrir une gamme de pays plus vaste. En Occident, la compagnie développe donc le charset Windows-1252 (une extension du standard "Europe de l'Ouest – ISO-8859-1").
Le problème, c'est que Windows fait plus qu'étendre l'encodage original et modifie certains des caractères de contrôle pour les transformer en caractères imprimables.
L'idée n'est pas forcément mauvaise (sinon, le caractère € n'existerait pas en Windows "natif", sans Unicode, de même pour le Œ)... mais cela devient une catastrophe quand on sort de Windows, pour faire du HTML par exemple. Même si la plupart des navigateurs ont compris que € correspondait au symbole € lorsque la page est encodé en ISO-8859-1 (puisque le caractère 128 d'ISO-8859-1 ne sert pas sur le Web), des problèmes surviennent lors du traitement des données, par exemple pour l'affichage avec une police TTF pourtant Unicode ou la recherche de caractères (le même caractère étant encodé deux fois, une fois avec le code "régulier" Unicode et une fois avec l'implémentation non normée de Microsoft [€ peut donc s'écrire € ou €]).
La question qui se pose est donc : comment résoudre ces problèmes ? La solution est simple, me direz-vous. Côté serveur, un simple str_replace() suffira. Oui mais non ! Juste pour vous amuser, tentez donc d'enregistrer le code suivant en ISO-8859-1 :
Si votre éditeur n'est pas trop bête, vous aurez droit à l'erreur "impossible d'enregistrer certaines composantes de la page", logique puisque la belle apostrophe n'apparait nulle part en ISO-8859-1. Les tentatives plus abouties pour corriger le problème se solderont par un échec aussi :
Le problème m'a longtemps paru insoluble sans enregistrer mes pages en UTF-8, jusqu'à ce que je tombe miraculeusement sur un fichier HTML généré par Windows. Celui-ci contenait l'apostrophe maudite... et une fois le fichier ouvert sur Linux, un magnifique carré blanc s'affichait () ! Si je modifiais le fichier, je n'avais pas de remarque à l'enregistrement... la solution était donc directe :
Et voilà ! Comme quoi, tout vient à point à qui sait attendre ;)
Pour en savoir plus :