code.progysm.com

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