Каково объяснение непоследовательного поведения DOMDocument при создании дампа не-ASCII символа? - PullRequest
4 голосов
/ 04 января 2010

Я заметил, что при использовании методов PHP DOMDocument * saveXML() и saveHTML() PHP отличается "дамп". Вот простой пример сброса символа авторского права (& copy;).

<?<br>$domDoc = new DOMDocument();<br> $domDoc->loadHTML("&copy;");<br> echo $domDoc->saveHTML();<br> echo $domDoc->saveXML();<br> echo $domDoc->saveXML($domDoc);<br> ?>

Три дампа дают три разных выхода:

Первый выводит строку &copy;
Второй выводит символьную сущность &#xA9;
Третий выводит 2-байтовый код UTF8 для символа авторского права (U+00A9)

Почему разные выходы? Есть ли способ контроля предсказуемости, какой метод используется?

1 Ответ

1 голос
/ 04 января 2010

Я не эксперт по PHP, но для первых двух:

  • saveHTML () будет использовать объекты, доступные в HTML, из которых &copy; - это один
  • saveXML () будет использовать шестнадцатеричные кодировки, поскольку сущности HTML не будут доступны

В-третьих, в документации сказано, что если вы предоставляете узел, то данный узел записывается без объявления XML (т.е. как фрагмент документа). Я могу только догадываться, что в этом случае он решает принять кодировку UTF-8. Такое поведение не очевидно из документации.

...