Я создаю строку XML с этим выражением в JavaScript:
var xml = '<xml xmlns="http://www.w3.org/1999/xhtml">' + dom.outerHTML + '</xml>'
(dom
- это некоторый узел в дереве документа.)
Позже я прочитал это обратно с помощью:
... = (new DOMParser).parseFromString(xml, "text/xml");
Обычно он работает нормально, но завершается неудачно, если одно из полей в dom
содержит символ пробела без пробелов, вводимый вручную с помощью Alt + 0160. В dom.outerHTML
это выглядит как
, но функция parseFromString
возвращает это:
<xml xmlns="http://www.w3.org/1999/xhtml">
<parsererror style="display: block; white-space: pre; border: 2px solid #c77; padding: 0 1em 0 1em; margin: 1em; background-color: #fdd; color: black">
<h3>This page contains the following errors:</h3>
<div style="font-family:monospace;font-size:12px">error on line 1 at column 139: Entity 'nbsp' not defined↵</div>
<h3>Below is a rendering of the page up to the first error.</h3>
</parsererror>
...
</xml>
(Это на самом деле результат функции, а не исключение! Очень странное решение (:.)
Я тоже пытался &nbsp;
, это удалось без тега <parsererror>
, но было прочитано как строка " "
, а не кодовая точка UNICODE 160.
Возможно, другие символы спецификации HTMLтакже затрагиваются.
Где и как я должен экранировать / заменить специальные символы HTML, чтобы получить в точности то же самое dom
, что и оригинал?
Заранее спасибо.