8792 sujets

Développement web côté serveur, CMS

Bonjour,

Je souhaite générer un flux xml, contenant du code Html, en utilisant la librairie Dom.

Le code suivant fonctionne :

<?php
	
$xml = new DomDocument;

$xml->loadXml("<?xml version='1.0' encoding='ISO-8859-1'?><?xml-stylesheet type='text/xsl'?><logitheque><logiciel><commentaire>Test html avec des accents é è à @. <br/> <br/><br/> <b>fdsqfd</b> </commentaire></logiciel></logitheque>");
	
$xml->save("file1.xml");
?>


et me génére le fichier xml suivant :

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type='text/xsl'?>
<logitheque>
	<logiciel>
		<commentaire>Test html avec des accents é è à @. <br/> <br/><br/> <b>fdsqfd</b> </commentaire>
	</logiciel>
</logitheque>


Par contre la génération du fichier xml noeud par noeud ne fonctionne pas :

dom = new DOMDocument('1.0', 'ISO-8859-1');
	
$dom->appendChild($dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl"'));
	
$element = $dom->appendChild(new DOMElement('logitheque'));
$element2 = $dom->appendChild(new DOMElement('logiciel'));
$element3 = $dom->appendChild(new DOMElement('commentaire', "Test html avec des accents é è à @. <br/> <br/><br/> <b>fdsqfd</b> "));

$element2->appendChild($element3);
$element->appendChild($element2);
	
$dom->save("file2.xml");
?>


L'erreur est la suivante :
Warning: DOMDocument::save() [function.DOMDocument-save]: output conversion failed due to conv error, bytes 0xE9 0x20 0xE8 0x20

Je pense que j'utilise mal l'attribut encoding et stylesheet mais je n'arrive pas à mettre la main sur de la documentation.

D'avance merci
J'ai le même problème que toi. Et dès que je retire l'encodage ISO-8859-1, ça fonctionne mais bon après, je n'ai plus d'accents. Logique. Mais bon, c'est un peu pénible. Si je trouve je poste ici ma réponse.
J'ai trouvé sur ce même forum :
$DOM->createTextNode(utf8_encode($contenu))

Il faut utiliser la fonction utf8_encode() dès que tu souhaites créer un noeud. Je sais, c'est bizarre compte tenu de l'encodage ISO mais ça fonctionne.