代码之家  ›  专栏  ›  技术社区  ›  MartyIX

如何在javascript中为XML生成有效的字符串?

  •  0
  • MartyIX  · 技术社区  · 14 年前

    我正在寻找一个函数,在需要的时候用XML实体将字符串转换为XML字符串。类似的东西 htmlentities 在PHP中,但在XML和JavaScript中。

    谢谢你的帮助!

    1 回复  |  直到 14 年前
        1
  •  2
  •   bobince    14 年前

    没有内置的(除了 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 _139;s您不需要(例如,很少需要将tab/cr/lf放入属性值中)。

    如果需要生成HTML兼容的XHTML,请使用 &#39; 而不是 &apos; 如果你需要逃跑。

    一般来说,你应该避免 htmlentities 使用 htmlspecialchars 相反,作为 HTML实体 不必要地将所有非ASCII字符编码为HTML实体引用,这也会在不正确的情况下破坏文本。 $charset 参数。

    推荐文章