Как сделать правильную строку для XML в JavaScript? - PullRequest
0 голосов
/ 02 июня 2010

Я ищу функцию для преобразования строки в строку xml с сущностями xml, где это необходимо. Что-то вроде htmlentities в PHP, но для XML и в Javascript.

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 02 июня 2010

Нет ничего встроенного (за исключением сериализации innerHTML, которая для этой цели очень сложна), вам придется написать это самостоятельно, например .:

function encodeXml(s) {
    return (s
        .replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''')
        .replace(/</g, '&lt;').replace(/>/g, '&gt;')
        .replace(/\t/g, '&#x9;').replace(/\n/g, '&#xA;').replace(/\r/g, '&#xD;')
    );
}

Это максимальная экранирующая функция для безопасности:

  • он всегда будет кодировать символы ", ' и tab / CR / LF, хотя их необходимо экранировать только в значении атрибута, где этот конкретный символ кавычки используется в качестве разделителя.

  • он всегда будет кодировать >, хотя на самом деле его необходимо экранировать, только когда часть последовательности ]]> в текстовом содержимом.

Если вам не нужны эти свойства, вы можете удалить replace, которые вам не нужны (например, довольно редко нужно указывать tab / CR / LF в значении атрибута).

Если вам нужно создать HTML-совместимый XHTML, используйте &#39; вместо &apos;, если вам нужен этот escape.

Как правило, вам следует избегать htmlentities и использовать вместо него htmlspecialchars, так как htmlentities излишне кодирует все не-ASCII-символы в качестве ссылок на сущности HTML, что также имеет побочный эффект, приводящий к искажению текста, если дать ему правильный $charset параметр.

...