我正在寻找一个函数,在需要时将字符串转换为xml实体的xml字符串。像PHP中的htmlentities,但是对于XML和Javascript。
感谢您的帮助!
答案 0 :(得分:2)
没有任何内置功能(除了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
(例如,很少需要将tab / CR / LF放在属性值中)。 / p>
如果您需要生成与HTML兼容的XHTML,请在需要转义时使用'
代替'
。
一般情况下,您应该避免使用htmlentities
并使用htmlspecialchars
,因为htmlentities
不必要地将所有非ASCII字符编码为HTML实体引用,这也会产生混淆的副作用如果你没有给它正确的$charset
参数,你的文本。