我正在寻找一个函数,可以根据需要将字符串转换为带有 xml 实体的 xml 字符串。类似于 htmlentities在 PHP 中,但在 XML 和 Javascript 中。
感谢您的帮助!
最佳答案
没有任何内置的东西(除了innerHTML
序列化,这对于这个目的来说是 super 狡猾的),你必须自己编写它,例如:
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 放入属性值中)。
如果您需要生成与 HTML 兼容的 XHTML,请使用 '
而不是'
如果你需要逃避。
一般来说,您应该避免 htmlentities
并使用htmlspecialchars
相反,如 htmlentities
不必要地将所有非 ASCII 字符编码为 HTML 实体引用,如果您不给它正确的值,这还会产生搞乱文本的副作用 $charset
参数。
关于javascript - 如何在 JavaScript 中为 XML 创建有效的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959642/