[Bug?] Avis sur un jeu... caractère \\\\\\\\

[Caractère]

Bonjour,

j'ai eu l'occasion de remarquer que certains avis sur les jeux contenaient d'étrange signe cabalistique du genre de ceux-ci:
l'\\\\ouverture.... n'\\\avait... d'\\\en....

Après avoir tenter d'y voir des messages de nature extraterrestre ou des manifestations de poltergeist, j'ai du, bien malgré moi, revennir à des explications plus terre à terre :?

Voici ce que j'ai remarqué:
Si par exemple on donne un avis et que l'on tape son texte, mais qu'on oublie de mettre son password ou qu'on utilise un pseudo déjà pris, on est invité à mettre son password... seulement voilà, il semble que notre texte subisse quand même un "parsing" (traitement ~ traduction...) qui consiste à mettre un backslash () devant les apostrophes (') et les guillemets ("), histoire, je suppose, de ne pas troubler Mr HTML. Résultat, après avoir changé de password ou/et de pseudo, notre texte est publié avec des \" et des \' et si on fait cette manipulation 3 fois on aura des \\" et des \\'.
Il faudrait pas faire se "parsing" après vérification du pseudo/password?

Enfin, évidement c'est l'explication la plus logique que j'ai trouvé :cry:

Personnelement, je préfèrerai y voir un tentative maladroite de communication d'une I.A. ou autre... C'est tellement plus poétique :wink:

Problème lié à Php je crois.
La fonction "addslash" est là pour résoudre ce problème : à confirmer par des développeurs.

Cher MOnsieur,

Oui, j'ai repéré aussi, et l'instruction qui le fait bien est en palce depuis le début, mais ce qui est zarb, c'est que certaine machines produisent des / qui passent quand même... Faudrait que je cherche pourquoi ou que je colle un controle supplémentaire...

Bine à vous de cordialement

Monsieur Phal

J'ai cru remarquer que ça ne le fait que lorsque le navigateur est en mode "Windows-1252" et non pas "ISO-8859-1" comme il devrait l'être (menu Affichage->Encodage de Firefox).

Ces deux encodages sont très proches (les accents sont les mêmes) mais l'une des différences est que Windows utilise des apostrophes et des guillemets "typographiques" (courbés à droite ou à gauche) que ISO ne différencie pas. Bref, peut-être que la fonction PHP idoine dont vous parlez ne reconnaît pas les caractères Windows comme étant des apostrophes et des guillemets. C'est une piste...

J'ai trouvé ici un document qui décrit le problème de façon plus générale. En lisant ça, je me rend compte que les backslash dans les avis ne sont pas le seul détail qui cloche. En fait, les pages de Tric Trac ne spécifient aucun encodage particulier. C'est mal. ;) En effet, ça veut dire que rien n'empêche d'utiliser dans les messages et les avis des caractères spécifiques à Windows, comme ça : “œ”. Le problème, c'est que si les utilisateurs de Windows lisent alors "oe" (avec guillements orientés et ligature du oe), les utilisateurs sous Linux ou Mac OS ne voient qu'un truc genre ???. Bref, il faudrait soit spécifier "Content-Type: text/plain;charset=Windows-1252" dans le HTML de toutes les pages, soit (pour une meilleure compatibilité) spécifier "charset=iso-8859-1" et convertir juste après leur saisie tous les caractères Windows qui ne sont pas dans iso-8859-1... Zut, encore du boulot. ;)

Ah, j'oubliais. Si l'on souhaite utiliser un vrai standard et non le codage Microsoft, mais que l'on veut quand même pemettre le OE ligaturé, on peut choisir le codage iso-8859-15. C'est peut-être ça le fin du fin, à condition que tous les navigateurs le supportent (c'est un standard plus récent que iso-8859-1).

Bon, en fait c'est plus compliqué que ça. Pour être correcte, une page HTML doit spécifier son codage à deux endroits : dans l'en-tête HTTP (qui ne se voit pas) et dans l'en-tête du source HTML (qui se voit). Voir par exemple ici.
Bien que les pages de Tric Trac n'aient pas d'encodage spécifié dans le source HTML, leur en-tête HTTP spécifie l'encodage par défaut d'Apache : iso-8859-1. On pourrait changer ça avec la fonction header() de PHP. Le plus simple est de rester en iso-8859-1, mais en le disant quand même dans le

du HTML car tous les navigateurs ne font pas attention au header HTTP. Mais le plus important, c'est de filtrer en entrée (champs de saisie des forums et des avis) tout ce qui n'est pas du iso-8859-1. Cela comprend le OE ligaturé, les quotes et guillemets orientés gauche-droite, etc. On peut remplacer ces caractères par leur équivalent "dégénéré" (oe non ligaturé, quote normale, etc.). Si l'on veut vraiment bien faire, on peut aussi remplacer ces caractères hors norme par leur entité HTML (par exemple &oelig pour le oe). Voir par exemple ici. Il doit bien traîner des routines PHP toutes faites... ;)