Как сделать правильную строку для XML в JavaScript?
Я ищу функцию для преобразования строки в строку XML с сущностями XML, где это необходимо. Что-то вроде htmlentities в PHP, но для XML и в Javascript.
Спасибо за любую помощь!
1 ответ
Там нет ничего встроенного (кроме innerHTML
сериализация, которая для этой цели очень сложна), вам придется написать ее самостоятельно, например:
function encodeXml(s) {
return (s
.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''')
.replace(/</g, '<').replace(/>/g, '>')
.replace(/\t/g, '	').replace(/\n/g, '
').replace(/\r/g, '
')
);
}
Это максималистская экранирующая функция для безопасности:
это всегда будет кодировать
"
,'
и символы табуляции /CR/LF, хотя они должны быть экранированы только в значении атрибута, где этот конкретный символ кавычки используется в качестве разделителя.это всегда будет кодировать
>
хотя это только на самом деле нужно избежать, когда часть]]>
последовательность в текстовом содержании.
Если вам не нужны эти свойства, вы можете удалить replace
S вам не нужно (например, довольно редко нужно указывать tab/CR/LF в значении атрибута).
Если вам нужно создать HTML-совместимый XHTML, используйте '
вместо '
если тебе нужен этот побег.
В общем, вам следует избегать htmlentities
и использовать htmlspecialchars
вместо этого, как htmlentities
излишне кодирует все не-ASCII-символы как ссылки на сущности HTML, что также имеет побочный эффект - испортить ваш текст, если вы не дадите ему права $charset
параметр.