JeuWeb - Crée ton jeu par navigateur
Affichage XML avec PHP - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Affichage XML avec PHP (/showthread.php?tid=4421)

Pages : 1 2


Affichage XML avec PHP - OncleJames - 25-10-2009

Bonjour à tous,

Voila quelques jours que je bloque sur un problème pas bien compliqué d'affichage d'un code XML crée en PHP.

J'utilise DOMDocument, je passe la création du document pour aller directement sur la création des balises.
Code PHP :
<?php 
$xmlMessage
= $this->XML->createElement('message', '');

// Attribut titre
$xmlAttrTitre = $this->XML->createAttribute('titre');
$xmlMessage->appendChild($xmlAttrTitre);
$xmlAttrTitreText = $this->XML->createTextNode(htmlentities($sTitre));
$xmlAttrTitre->appendChild($xmlAttrTitreText);

$this->rAjax->appendChild($xmlMessage);
$this->XML->appendChild($this->rAjax);

Ensuite l'affichage tout simple:
Code PHP :
<?php 
echo $this->XML->saveXML();

L'erreur navigateur (FF) que j'obtiens:
Citation :Erreur d'analyse XML : mal formé
<?xml version="1.0" encoding="UTF-8"?>
-^

Et le code source de la page:
Code :
<?xml version="1.0" encoding="UTF-8"?>
<ajax><message titre="Confirmation d'achat"></message></ajax>

Quand j'ouvre le fichier sur IE en ré écrivant à la main la première ligne, il reconnait bien un fichier XML.
Je m'oriente donc sur la voie du parsage incorrect de <? et ?>, en essayant de convertir avec htmlspecialchars, le problème persiste.

Merci par avance,
Onclejames


RE: Affichage XML avec PHP - Roworll - 26-10-2009

Comme la structure du XML est correcte, tu n'aurais pas un ou deux caractères cachés sur la première ligne ?
L'encodage en UTF-8 rajoute un marqueur en début de fichier.
Jette un oeil à ton fichier XML sortant avec un héditeur hexadécimal histoire de vérifier que tu as bien le BOM (Byte Order Mark) pour UTF-8 et si l'encodage se fait bien sur deux octets par caractère.


RE: Affichage XML avec PHP - Sephi-Chan - 26-10-2009

Tout comme Roworll, je pense qu'il s'agit d'un problème d'encodage ou de BOM, puisque de toute façon, il ne reste pas grand chose comme possibilité.

Cependant, je ne sais pas à quel niveau c'est géré. Dans le fichier que tu ouvres en écriture pour y écrire ton XML, ou bien dans l'API DOM ?

Cependant, est-il nécessaire d'inclure le BOM ? N'est-ce pas quelque chose que l'on vite, habituellement ?


Sephi-Chan


RE: Affichage XML avec PHP - jo_link_noir - 26-10-2009

sur wikipédia
Citation :Alors qu'UTF-8 n'est lié à aucune problématique d'ordre des octets, un BOM codé en UTF-8 peut être utilisé pour identifier un fichier comme UTF-8, bien que ce ne soit pas recommandé[1]. Le BOM n'apporte alors aucune information sur l'ordre des octets[2].

Plein de problème avec le BOM, par dans un fichier php, il empêche d'utiliser les header et session car le BOM est envoyé avant que le script ne commence :/.

Personnellement je n'ai pas de BOM dans mes fichiers UTF-8 (et mes éditeurs de texte ne me le propose pas xD).


RE: Affichage XML avec PHP - Roworll - 26-10-2009

Je fonctionne avec des fichiers XML en utf-8 depuis pas mal de temps.
Je n'utilise que très peu SimpleXML de PHP mais je fais beaucoup d'inclusions de fichiers externes et je renvoie vers le navigateur du XML qui est mis en page par du XSL.

Si mes fichiers XML ne sont pas en utf-8 (avec un BOM et un codage de chaque caractère sur deux octets), toutes les minuscules accentuées au autres caractères spéciaux sont mal affichés.
Cela par contre n'empêche pas l'affichage de mes pages XML sur tous les navigateurs existants.

De plus, quand je sauvegarde la source du fichier en local puis que je l'ouvre dans un éditeur de texte, elle est bien en UTF-8 avec un BOM (exemple ici.


RE: Affichage XML avec PHP - niahoo - 27-10-2009

tu as peut-être laissé l'autorisation d'utiliser les short tags php dans la config php ?


RE: Affichage XML avec PHP - NicoMSEvent - 27-10-2009

Tu envoie quoi comme header? mime-type? autre?


RE: Affichage XML avec PHP - jo_link_noir - 27-10-2009

Roworll pour un fichier UTF-8 vide le BOM est-il renseigné ?
J'ai regardé avec un éditeur hexadécimal et :
- Pour un fichier vide il fait 0 octet donc pas de BOM.
- Un fichier avec plop dedans fait 4 octets mais pas de BOM non plus (706c 6f70)

Avec le BOM ça devrait faire "ef bb bf 70 6c 6f 70", non ?


RE: Affichage XML avec PHP - Roworll - 28-10-2009

S'il n'y a pas de BOM, ce n'est pas de l'UTF-8.
Rien n'empêche cependant de faire de l'ASCII tout bête avec un encoding "UTF-8". C'est incohérent mais faisable.

Mettre l'attribut encoding à "UTF-8" ne suffit pas. Il faut que le fichier soit sauvé en UTF-8.


RE: Affichage XML avec PHP - jo_link_noir - 28-10-2009

Oui oui, avec encodage UTF-8. D'ailleurs les lettre accentué font 2 octets. Et après ré-ouverture si je met en ISO 8859-1 le é ce transforme en é.