IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[DOM] Problème d'encodage


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut [DOM] Problème d'encodage
    Bonjour à tous,

    J'ai un problème d'encodage aujourd'hui; ca fait un moment que je me casse la tête je viens donc vous demander de l'aide.

    J'ai un fichier xml encodé en ISO-8859-1, j'ai un script php qui me le charge et l'affiche sur une page html qui est elle-même en charset ISO-8859-1 et malheureusement les caractères spéciaux de type éà... ne s'affichent pas correctement. Vous avez une idée?

    Mon code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //DOM
    	$doc = new DOMDocument("1.0","ISO-8859-1");
    	$doc->load("ajax\queries.xml");
    	$nodeList = $doc->getElementsByTagName("query");
    	foreach($nodeList as $item){
    		echo $item->nodeValue."<br>";
    	}

  2. #2
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Ton script PHP envoie t'il un header quelque part ?

  3. #3
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Non mon script est cité au-dessus

  4. #4
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Alors essaye d'envoyer un header spécifiant l'encodage avant tout envoi de html ou de xml au navigateur.

    header("Content-type: text/html; charset=utf-8");

  5. #5
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Je précise, pour ton cas, l'encodage est:
    header("Content-type: text/html; charset=ISO-8859-1");

  6. #6
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Oui je veux bien (pour l'instant je ne peux pas tester) mais ce script je le lance dans un fichier html qui a dans l'entête une balise méta spécifiant le charset à ISO-8859-1!

    C'est quand même bizarre non?

  7. #7
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Ce que tu sembles avoir du mal a comprendre, c'est que quand tu envoies du HTML ou du XML avec PHP, il faut en spécifier l'encodage.

    Dans certains cas, l'encodage que tu envoies est le même que celui du serveur, donc la tu n'as pas de souci, mais dans le cas ou celui-ci est différent et également par souci de portabilité de tes scripts, il faut le préciser.

    Les balises META spécifiant l'encodage des pages HTML sont supperflues et inutiles si tu géneres tes pages ou une partie des pages avec PHP (n'oublie pas que quand tu fais un echo en PHP le contenu de ce echo est défini par PHP)

    Il est donc primordial que tu spécifie cet encodage avec l'envoi d'un header dans ton script PHP, sinon tu auras ces problèmes de caractères.

  8. #8
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    C'est vrai que cet aspect je le comprenais peut-être mal mais en attendant ca ne change rien, j'ai toujours pu mettre des caractères spéciaux depuis mon script, c'est ce qui est chargé depuis le fichier xml qui n'est pas bien encodé.

  9. #9
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    et quand tu fais echo $item->nodeValue."<br>"; dans le script que tu cites plus haut, c'est les valeurs de $item->nodeValue qui sont mal encodés ou c'est autre chose ?

  10. #10
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Tout ce qui est lu depuis le fichier xml par DOM est pas encodé comme je le désire.

  11. #11
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    je ne saisi pas tout, mais en tout cas c'est important que toute la chaine soit établi du même encodage, que ca soit PHP, les fichiers XML, les récupération de données des bases de données et autres sorties HTML doivent être identiques au niveau de l'encodage sinon ca ne peut pas jouer et tu en as la preuve avec tes problèmes de caractères.

    Si tu dis ne pas avoir accès à l'encodage de tes fichiers XML alors tu dois créer un script qui les convertira dans l'encodage souhaité.

  12. #12
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Ce qui est accédé est du même type d'encodage que ce qui est créé.

    Autrement dit, mon fichier xml mais aussi ce que crée mon script est du même encodage d'où mes questions

  13. #13
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Oui et d'ou mes réponses, dans quel encodage PHP te renvoie t'il les sorties lorsque tu fais un echo par exemple ?

    Si j'etais toi, j'essayerai ce que je t'ai dit, c'est à dire d'envoyer un header dans le script PHP en tout début de script et surtout avant l'initialisation de ta classe en ajoutant cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-type: text/html; charset=ISO-8859-1");
    Tu devrais aussi vérifier comment ta classe gère l'encodage et dans le cas ou ca ne suit pas ton encodage, agir en conséquence directement sur le script de cette classe.

  14. #14
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Oui j'ai essayé de faire comme tu m'as dit mais ca ne marche pas.

    C'est la lecture de mon fichier XML à mon avis.

  15. #15
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Bizarre quand même...
    Et dans la classe elle-même, t'as essayé de voir comment étais géré cet encodage ?

  16. #16
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Je n'utlilise pas de classes externe si ce n'est la librairie DOM.

  17. #17
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Peut-être qu'en réexpliquant mieux vous pourrez mieux m'aider.

    J'ai 3 fichiers:
    • queries.xml
    • list.html
    • ParserQueries.inc


    Le fichier xml a comme en-tête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?>
    Le fichier list.html me sert simplement à afficher mon fichier xml (c'est un test)

    Le fichier ParserQueries.inc parse mon fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    header("Content-type=text/html; encoding='ISO-8859-1'");
    $doc = new DOMDocument("1.0","ISO-8859-1");
    	$doc->load("ajax\queries.xml");
    	$nodeList = $doc->getElementsByTagName("query");
    	foreach($nodeList as $item){
    		echo $item->nodeValue."<br>";
    	}
    J'ai essayé aussi d'afficher en text/plain pour voir si c'était un prob html mais rien y fait, j'ai toujours des caractères mal encodés. Par contre si je rajoute par exemple un
    L'affichage se fait correctement. C'est donc la partie DOM qui fonctionne mal.

    Vous voyez l'erreur vous?

  18. #18
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    bon je ne vois plus que 2 choses possibles, mais à ce stade je ne suis plus certain de mes propos.

    1. Soit le fichier XML n'est pas crée avec le bon encodage. Dans ce cas il faut configurer ton éditeur pour travailler avec l'encodage que tu souhaites AVANT LA CREATION DU FICHIER

    2. Soit le serveur renvoie mal le XML, mais la sincèrement je ne suis pas expert et je ne m'avancerait pas sur cette question

    Essaye de simplifier tes tests au scrict minimum et tiens nous au courant.

  19. #19
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Si j'affiche le fichier XML dans le navigateur, tous les caractères sont bien retranscris, donc le fichier XML doit bien être créé.

    Quant à ta 2ème proposition je ne sais pas trop qu'en faire....

Discussions similaires

  1. [DOM] Problème d'encodage UTF-8
    Par Valter dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/05/2008, 15h32
  2. [DOM] probléme d'encodage
    Par Mo_Poly dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/10/2007, 01h30
  3. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  4. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59
  5. [DOM]Problème de liens sous ie
    Par Buster dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/05/2005, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo