0

我正在寻找一个函数,可以在需要的地方将字符串转换为带有 xml 实体的 xml 字符串。类似于PHP 中的htmlentities,但用于 XML 和 Javascript。

感谢您的任何帮助!

4

1 回答 1

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;')
    );
}

这是一个为了安全起见的最大化逃逸函数:

  • 它将始终对 和 tab/CR/LF 字符进行编码"'尽管它们只需要在属性值中进行转义,其中特定的引号字符被用作分隔符。

  • 它将始终进行编码>,尽管实际上仅]]>在文本内容中的序列的一部分时才需要对其进行转义。

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

如果您需要生成与 HTML 兼容的 XHTML,请使用&#39;而不是&apos;如果您需要转义。

一般来说,您应该避免htmlentitieshtmlspecialchars改为使用,因为不必要地将所有非 ASCII 字符编码为 HTML 实体引用,如果您不给它正确的参数htmlentities,这也会产生搞砸文本的副作用。$charset

于 2010-06-02T17:29:36.000 回答