Bonjour,
Premièrement je vous donne ma config:

PHP Version 4.4.3-dev // MySQL 5.0.23-nightly (jeux de caractère UTF-8 Unicode (utf8) et Interclassement utf8_general_ci).

Le plus simple c'est une image explicative.
Image suprimée
(le "é" c'est juste pour voir ce que cela donne avec un caractère ISO)

Donc le problème est lors de l'écriture dans la base de données SQL qui transforme le caractère UTF en entité (normalement pas de problème sauf que dans mon PHP après j'utilise un htmlentities() donc cela va donner un &#1329
Il faudrait que cela ne transforme pas le caractère en entité dans la base de données (comme les caractères ISO qui restent tels que).

Merci d'avance
Modifié par Sined_style (02 Jul 2006 - 19:19)
Je n'arrive pas à comprendre. Pour passer de ton caractère initial à l'entité Ա, qui ou quoi effectue le traitement ? Et de même, pourquoi la récupération des données dans la base s'accompagne-t-elle d'une nouveau traitement ?

L'intérêt de l'UTF-8 n'est-il pas justement de se passer des entités HTML type Ա ou é ?
Enfaite le problème c'est que le caractère est stoqué sous forme d'entité dans la base de données. Tout les autres caractères (é, €, ...) sont stoqué brut, sans entité mais les caractères utf sont stoqué sous forme d'entités.

La vous me direz, caractères sous forme d'entité ou non, les caractères s'affichent.
Oui mais en envoyant les données SQL au navigateur (à l'aide de PHP) je les filtres avec la fonction htmlentities() qui transforme tout les caractères speciaux en entités.
Donc transformer deux fois un caractère en entité cela ne marche plus après.

Ա (SQL) => Ա (HTML) => Ա (Rendu visible)
Je ne vois pas l'intérêt d'encoder les caractères appartenant à une norme iso-8859-1 ou iso-8859-15 en texte brut, et ceux que l'on ne trouve que dans l'UTF-8 ou d'autres encodages plus spécifiques sous forme d'entités HTML. Les caractères non-ASCII de l'iso-8859-1 ne correspondant pas à des caractères UTF-8 (et inversement), ça ne me semble pas très logique. Tu convertirais tout ce qui est non-ASCII en entités HTML, je comprendrais (dans ce cas, l'utilisation de l'UTF-8 pour la page web serait idiote, mais bon…), mais là je suis perdu.

La solution : il faut régler un de tes deux comportements, soit à l'entrée dans la base de données (on ne convertit alors rien), soit à la récupération des infos dans la base (les infos utilisant déjà les entités HTML, on n'utilise pas la fonction PHP correspondante).

Mais normalement, si tu utilises de l'UTF-8, c'est parce que tu comptes te passer de ces deux automatismes, et ne réaliser aucune conversion. C'est justement l'intérêt de l'UTF-8, non ? Smiley sweatdrop
mpop a écrit :
Je ne vois pas l'intérêt d'encoder les caractères appartenant à une norme iso-8859-1 ou iso-8859-15 en texte brut, et ceux que l'on ne trouve que dans l'UTF-8 ou d'autres encodages plus spécifiques sous forme d'entités HTML.

C'est pas moi qui fait ça, cela le fait automatiquement.

C'est là justement le problème sinon je saurais comment le résoudre Smiley cligne

Et sachant que j'utilise un CMS avec des fonction htmlentities() un peu partout je prefère résoudre le problème des entités avec les caractères UTF que de supprimer ces fonctions.
Merci
Sined_style a écrit :
C'est pas moi qui fait ça, cela le fait automatiquement.

Ben si tu n'as aucun contrôle sur aucun des deux aspects, je sais pas quoi te dire…

Sined_style a écrit :
Et sachant que j'utilise un CMS avec des fonction htmlentities() un peu partout je prefère résoudre le problème des entités avec les caractères UTF que de supprimer ces fonctions.

Quel CMS, en passant ? Et as-tu configuré ce CMS pour utiliser l'UTF-8 ? Parce que si celui-ci ne le prévois pas, ça risque d'être difficile. Et même : s'il prévoit que tout soit en ASCII ou en Latin1, et que tu essayes de bidouiller pour avoir de l'UTF-8, ça risque d'être dur.

Enfin, ce CMS a probablement des forums ou listes de discussion dédiées. Je suppose que tu y trouveras des personnes qui ont déjà été confrontées à ce problème. Parce qu'ici, on peut juste te répondre globalement, pas sur le comportement spécifique du CMS.
Ok merci des infos.
Le CMS c'est NUked-Klan, à l'origine il n'est pas prévu pour d'autres encodages que l'ISO-8859-1.
Il sera capable d'utiliser d'autres encodages dans ses prochaines versions mais pas pour l'instant et c'est ce que j'essaie de faire.
J'ai déjà trouvé une technique pour rajouter des caractères qui posaient problème:
http://openweb.eu.org/articles/caracteres_illegaux/
Mais bon je crois que je vais passienter pour l'UTF Smiley biggrin
Encore merci
Sined_style a écrit :
Le CMS c'est NUked-Klan, à l'origine il n'est pas prévu pour d'autres encodages que l'ISO-8859-1.

Ceci explique cela.