Bonjour,

Je viens de voir qu'il y avait un problème sur mon site internet et j'ai du mal à comprendre. Celui-ci est totalement en UTF8 et tout s'affichait bien jusqu'à ce que je remarque un bug dans un formulaire.

Voyez plutôt :
- http://webidentity.widjoo.com/Gaylord.P/

Je vous invite, dans la liste déroulante de "Mes musiques préférées", à sélectionner la musique "Déportivo : Immobilit?" ; comme vous pouvez le voir, le é est remplacé par "?" : lorsqu'on valide, le titre est écrit en dessous, dans une balise <dd> cette fois, et il s'affiche correctement.

Pourquoi en tel écard d'interprétation entre deux balises ? Smiley ohwell
Merci d'avance. Smiley smile
Modifié par Gaylord.P (28 Nov 2007 - 19:25)
Il faudrait que tu nous dise d'où viennent les données et comment elles sont traitées pour chaque affichage. Est-ce que le titre de la chanson est en base de données? Est-ce qu'il est envoyé via le formulaire?
Salut et merci d'avoir répondu.

Le titre est enregistré dans une base de données MySQL, au format utf8_unicode_ci ; les pages sont également en UTF8. Le titre est appellé par une requête MySQL, tout simplement et sans aucun traitement.

... étrange que cela fonctionne en "texte" et pas dans un formulaire.
Salut,

puisque le é de "Déportivo" est bien affiché, j'aurais tendance à suspecter une erreur d'encodage dans ta base sur le é de "immobilité" Smiley cligne ...
Gaylord.P a écrit :
au format utf8_unicode_ci

utf8_unicode_ci n'est pas un encodage mais un interclassement.
De plus, les données s'affichent-elles bien avec PhpMyAdmin (avec interface de PhpMyAdmin en UTF-8, vérifier l'encodage utilisé par le navigateur sur PhpMyAdmin), ou autre application semblable?

Bref, il faudrait vérifier de manière fiable que les données sont OK.

Ensuite, si les données sont OK il faut vérifier ton code serveur (PHP, I presume?), il se peut que dans un cas tu utilise une fonction qui ne gère pas l'UTF-8, ou que tu récupères les données séparément avec deux connexions dont l'une demande de l'UTF-8 (ou ne précise rien) et l'autre demande du latin1 (SET NAMES latin1...).
Je suis plutôt de l'avis de Heyoan : s'il y avait un problème d'encodage globale, tous les accents poseraient problème.
Or ici, seul 1 accent est mal codé. Un mauvais copié-collé peut-être.
Bonjour à tous,
En lisant la réponse de Heyoan, je me suis rendu compte qu'il y avait un problème bizarre ... j'avais pas "tilté" en voyant le "é" de Déportivo. En y regardant de plus près, c'est à cause d'une troncature ( substr() ) qui est effectuée sur les musiques afin d'éviter que le formulaire ne dépasse du menu.
Cette troncature est réalisée en plein milieu de "é", qui est enregistré en "é" dans la base de données (bizarre, ça aussi ... je pensais qu'en UTF8 tout était convenablement enregistré).

Merci de votre aide en tout cas. Smiley smile
Je ne sais pas si j'ai bien compris, mais tu devrais peut-être avoir recours à utf8_decode et utf8_encode (php 4 et 5) si tu jongles avec les encodages.
Gaylord.P a écrit :
qui est enregistré en "é" dans la base de données

Enregistré comme «Ã©» en UTF-8, ou bien enregistré comme «é» en UTF-8 et affiché comme «Ã©» par une interface type PhpMyAdmin dont l'encodage pour l'affichage des pages serait ISO-8859-1?

C'est trompeur les encodages: ce que l'on voit n'est pas nécessairement un reflet de la réalité. Il faut apprendre à vérifier tous les paramètres. Smiley cligne
Bonsoir,

Ton problème vient du fait que le noyau de PHP dans les versions antérieures à 6 fonctionne en ASCII et pas en UTF-8 ce qui a pour conséquence ceci:

<?php
// Affiche 5 si le document est enregistré en iso et 6 en utf-8.
echo strlen('Hellô');
?>

Techniquement ta chaine est bien en utf8 mais php la traite comme de l'ASCII: "Déportivo : Immobilité" et effectivement une troncature au milieu de é va corrompre l'UTF8.

En attendant php6 stable la solution est d'utiliser les fonctions mb_string si disponibles (dans ton cas mb_substr() ).



PS: une astuce pour détecter ce genre de cause est qu'en général forcer l'encodage en iso (via le menu du navigateur) ne corrige pas l'accent.
Modifié par Necromantik (28 Nov 2007 - 23:32)
Merci Necromantik pour ces conseils. Je ne savais pas ça.

Sinon, pour Florent V., il est affiché comme «Ã©» par une interfarce tel que PhpMyadmin alors qu'il s'affiche bien dans une page normale, je suppose donc qu'il est enregistré convenablement.

Vraiment trompeur tous ces trucs ... Smiley biggol
Gaylord.P a écrit :
Sinon, pour Florent V., il est affiché comme «Ã©» par une interfarce tel que PhpMyadmin

Et PhpMyAdmin déclare ses pages en ISO-8859-1?
Et si tu demandes au navigateur de forcer l'affichage en UTF-8, ça corrige le problème?

Il faut prendre l'habitude de faire ce genre de test pour vérifier l'encodage réel des données. Smiley cligne
Losque j'accède à PHPMyadmin en affichant en UTF8, ça marche sur certains ordinateurs, sur d'autres non. L'ordinateur que j'utilise habituellement étant un ordinateur appartenant à un réseau bien spécifique, je ne peux pas trop me baser dessus ... Smiley ohwell

Je verifierai une nouvelle fois sur un ordinateur "normal", d'ici fin décembre.
Pour revenir sur ce que je disais, l'utilisation de utf8_encode et decode est souvent une bonne solution.

Tu as aussi iconv en PHP 4&5 mais, comme les mb_string, encore faut-il que ton hébergeur ait compilé PHP avec les bonnes options.