如何在JavaScript中为XML创建有效的字符串?

时间:2010-06-02 16:32:19

标签: javascript string xml-entities

我正在寻找一个函数,在需要时将字符串转换为xml实体的xml字符串。像PHP中的htmlentities,但是对于XML和Javascript。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

没有任何内置功能(除了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;')
    );
}

这是一个最大限度的逃避安全功能:

  • 它始终会对"'和制表符/ CR / LF字符进行编码,但它们只需要在属性值中进行转义,其中该特定引号字符用作分隔符。

  • 它始终会对>进行编码,但实际上只需要在文本内容中]]>序列的一部分时进行转义。

如果您不需要这些属性,可以删除不需要的replace(例如,很少需要将tab / CR / LF放在属性值中)。 / p>

如果您需要生成与HTML兼容的XHTML,请在需要转义时使用&#39;代替&apos;

一般情况下,您应该避免使用htmlentities并使用htmlspecialchars,因为htmlentities不必要地将所有非ASCII字符编码为HTML实体引用,这也会产生混淆的副作用如果你没有给它正确的$charset参数,你的文本。