Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[resolu] Mysql, encodage des caractères


alex.hitman

Messages recommandés

Bonjour,

 

J'ai un problème disons... très bizarre avec mysql. J'ai essayé de tout vous détailler.

 

 

J'ai configuré les tables, champs etc... de mysql pour encoder les caractères en utf8_unicode_ci (enfin, UTF-8 quoi !).

J'ai deux pages PHP qui extraient une même valeur d'un de ces champs mysql. Les deux pages sont encodées en UTF-8, et le charset HTML est défini sur UTF-8.

 

Sur la première page (page A), tout s'affiche correctement.

Sur la seconde (page B), les caractères de la source de la page sont affichés correctement, mais les caractères extraits du champ de mysql non (problème d'encodage évident).

 

J'ai donc vérifié les encodages grâce à une fonction en PHP (mb_detect_encoding()) des pages, et de la valeur extraite du champ de mysql. Résultats :

 

page A : UTF-8

champ mysql extrait dans la page A : UTF-8

 

page B : UTF-8

champ mysql extrait dans la page B : ASCII

 

 

Mais tout devrait être en UTF-8 ! Et forcément, encodé en ASCII au milieu d'UTF-8, il est pas beau ce champ !

 

 

 

Mais comment ce champ peut-il être extrait de ma base de données en UTF-8 sur une page, et en ASCII sur une autre ? Alors qu'en plus, les procédures d'extraction sont les mêmes (un simple SELECT).

 

Et si par hasard vous aviez la solution à ce problème, ça serait sympa de m'aider, car je dois absolument résoudre ça. Je veux de l'UTF-8 partout !

 

 

 

Merci.

Modifié par alex.hitman
Lien vers le commentaire
Partager sur d’autres sites

Merci de la réponse.

 

Alors voici (le champ concerné est "Nom", mais cela fait de même pour les autres) :

 

La table :

7c155517f34ef3d50e1327c866f1t.jpg

 

 

Page A :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

mysql_fetch_row(mysql_query('SELECT IDarticle,Nom,Contenu FROM '.$this->prefixe.'_pwm_pages WHERE ID="'.$this->idpage.'"'));
[...] echo $resultat[1];

99b78a3681efa7798078c352d2a7t.jpg

 

 

 

Page B :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

$execution = mysql_query('SELECT ID,IDarticle,Valid,Numero,Nom FROM `'.$prefix.'_pwm_pages` WHERE IDarticle="'.$id_used.'" ORDER BY "Numero" LIMIT '.$pi.', 10');
while($resultat = mysql_fetch_assoc($execution))
{
   [...] echo $resultat['Nom'].'...';

92472a73420a1eecc29ce56ec055.jpeg

 

 

 

Ce qui me parait aussi bizarre, c'est que même en définissant les variables de mysql sur UTF8, c'est la même chose :

mysql_query('SET character_set_client = utf8');
mysql_query('SET character_set_results = utf8');
mysql_query('SET character_set_connection = utf8');

 

Et toujours pareil quand j'essai d'encoder en UTF8 le champ avec une fonction en PHP...

Modifié par alex.hitman
Lien vers le commentaire
Partager sur d’autres sites

Un truc qui est bizarre c'est que je rencontre depuis peu de temps un problème similaire dans l'interface de phpMyAdmin : sur certaines pages et à certains moment des caractères mal encodés (ou décodés) aparaissent :-(

Je me demande si ce ne serait pas un bug de php, car la seule nuance que je vois entre les deux cas que tu décris c'est l'utilisation de mysql_fetch_row dans un cas de de mysql_fetch_assoc dans l'autre :P

Il y a peu être un problème de décodage de l'utf8 dans l'implémentation de mysql_fetch_assoc...

essaie toujours de remplacer fetch_assoc par fetch_array, pour voir. ou bien modifie ton code de la page B en utilisant une boucle et fetch_row à la place de fetch_assoc :-P:P

 

Est-ce que tu as essayé d'afficher tes pages dans d'autres navigateurs ?

Modifié par mediaforest
Lien vers le commentaire
Partager sur d’autres sites

Résultats :

 

Avec utf8_encode() : Pr�©sentation

C'est un peu différent, et c'est en fait la même chose que lorsque je définis les variables mysql à utf8. On dirait qu'il y a 2 passages de mauvaise compréhension de l'encodage. Peut-être que les données sorties sont en fait en utf8, mais que PHP croit autre chose...

 

mysql_fetch_array() : aucun changement

mysql_fetch_row() : aucun changement

 

 

Je vais voir si je peux définir l'encodage à UTF8 lors de la requète.

Lien vers le commentaire
Partager sur d’autres sites

Je n'en reviens pas ! J'ai trouvé...

 

En fait j'ai vu que j'avais mis un htmlentities() sur la page B. Et c'est lui qui fait tout foirer !

 

Sans le htmlentities, c'est OK. C'est vraiment bizarre ça... Je l'ai remplacé par htmlspecialchars() qui me suffit, et c'est toujours bon.

 

 

Merci en tous cas :P

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...