DOMDocument Type Object Constructors: new DOMDocument([string $version][, string $encoding]); $d1 = new DOMDocument; $d2 = new DOMDocument("1.0", "UTF-8"); Functions: DOMDocument.getElementsByTagName(string $tagName) : DOMNodeList load(string $filename, int $options = 0) : bool static load(string $filename, int $options = 0) : DOMDocument|bool DOMDocument.loadHTML(string $filename) : bool DOMDocument.saveHTML([DOMNode $node]) : string Version et caractères supportés (testé avec php 7.2 / libxml2 2.9.4): DOMDocument repose sur la bibliothèque libxml2 et supporte que la version 1.0 de XML. $d3 = new DOMDocument("1.1", "UTF-8"); // pas de problème encore $d3->saveXML(); // <?xml version="1.1" encoding="UTF-8"?> $d3->loadXML('<?xml version="1.1" encoding="UTF-8"?><test />'); // PHP Notice: DOMDocument::loadXML(): Unsupported version '1.1' in Entity $d3->saveXML(); // <?xml version="1.1" encoding="UTF-8"?><test/> La version XML 1.0 ne supporte pas les caractères de contrôles (C0) de U+0001 à U+001F sauf: U+0009 (\x09) 9 \t U+000A (\x0a) 10 \n U+000D (\x0d) 13 \r Pour enlever les caractères de contrôles C0: $str = preg_replace("/[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1F]/", "", $str); Caractères: XML 1.0 XML 1.1 U+0000 invalide invalide U+0001 à U+0008 non supporté supporté (restreint) U+0009 supporté supporté U+000A supporté supporté U+000B non supporté supporté (restreint) U+000C non supporté supporté (restreint) U+000D supporté supporté U+000E à U-001F non supporté supporté (restreint) U+0020 à U+D7FF supporté supporté U+D800 à U+DFFF non supporté non supporté U+E000 à U+FFFD supporté supporté U+FFFE non supporté non supporté U+FFFF non supporté non supporté U+10000-U+10FFFF supporté supporté Autre caractère restreint dans XML 1.1: U+007F–U+0084, U+0086–U+009F // le chargement d'un document sans encodage UTF-8 provoque un avertissement avec saveXML $d4 = new DOMDocument("1.1", "UTF-8"); $d4->loadXML('<test />'); // loadXML enlève l'encodage et met la version 1.0 $d4->documentElement->appendChild($d4->createTextNode("\v")); echo $d4->saveXML(); // PHP Warning: DOMDocument::saveXML(): xmlEscapeEntities : char out of range // <?xml version="1.0"?> // <test></test> $d5 = new DOMDocument("1.0"); $d5->appendChild($d5->createElement('test')); $d5->documentElement->appendChild($d5->createTextNode("\v")); echo $d5->saveXML(); // PHP Warning: DOMDocument::saveXML(): xmlEscapeEntities : char out of range // <?xml version="1.0"?> // <test></test> // le chargement d'un document avec encodage UTF-8 provoque un avertissement au chargement avec loadXML $d6 = new DOMDocument("1.1"); $d6->loadXML('<?xml version="1.0" encoding="UTF-8"?><test />'); // loadXML change l'encodage et la version $d6->documentElement->appendChild($d6->createTextNode("\v")); $str = $d6->saveXML(); echo $str; // <?xml version="1.0"?> // <test> // </test> $d6->loadXML($str); // PHP Warning: DOMDocument::loadXML(): PCDATA invalid Char value 11 in Entity, line: 2 $d7 = new DOMDocument("1.0", "UTF-8"); $d7->appendChild($d7->createElement('test')); $d7->documentElement->appendChild($d7->createTextNode("\v")); $str = $d7->saveXML(); echo $str; // <?xml version="1.0"?> // <test> // </test> $d7->loadXML($str); // PHP Warning: DOMDocument::loadXML(): PCDATA invalid Char value 11 in Entity, line: 2 Liens: Valid characters in XML