Как сделать так, чтобы DOMDocument был хорош для управляющих символов ASCII? - PullRequest
0 голосов
/ 04 января 2010

HTML-документ, который я анализирую, содержит некоторые управляющие коды ASCII.Я заметил, что синтаксический анализатор PHP DOMDocument усекает текстовые узлы, когда находит в нем управляющие символы ASCII, например

Device Control 0x13

End of Medium 0x19

File Separator 0x1C

Group Separator 0x1D

Это ошибка или функция?Есть ли способ заставить DOMDocument действовать иначе?Я прибег к удалению этих символов перед обработкой DOM, но мне интересно, правильное ли это решение.

Ответы [ 2 ]

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

Вероятно, это и ошибка, и особенность.

XML 1.0 очень строгий относительно управляющих символов ASCII, которые он будет принимать.Похоже, что ваш DOMDocument пытается защитить вас от себя путем усечения (хотя он должен возвращать некоторые признаки проблемы, поэтому я бы назвал это ошибкой).

XML 1.1 менее ограничивающий;единственное, чего он не позволяет, это NUL.Итак, одно из возможных решений - настроить объект DOMDocument таким образом, чтобы он знал, что должен управлять 1.1.


Редактировать: он выглядит как , вы можете передать номер версии XML вКонструктор DOMDocument (но я не программист PHP, поэтому не знаю, правильно ли я читаю документы).


Редактировать 2: Я просто перечитал ваш вопрос и понял, что ваш синтаксический анализне строит.Если вы добавляете действительный пролог версии 1.1 к вводу, это должно быть обходным путем.Или, возможно, создав DOMDocument с правильным номером версии, он будет правильно анализироваться без этого пролога.

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

Чтобы добавить к тому, что kdgregory говорит о допустимых символах, эти управляющие символы недопустимы не только в XML, но и в SGML. Таким образом, унаследованный HTML или XHTML никогда не сможет проанализировать ни один из этих символов в HTML-документе.

(И я понятия не имею, зачем вам это нужно. Двоичные данные не принадлежат [X] [HT] ML.)

...