首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在javascript中转义xml实体?

如何在javascript中转义xml实体?
EN

Stack Overflow用户
提问于 2011-10-28 00:04:10
回答 7查看 96.1K关注 0票数 82

在JavaScript (服务器端nodejs)中,我编写了一个生成xml作为输出的程序。

我通过连接一个字符串来构建xml:

代码语言:javascript
复制
str += '<' + key + '>';
str += value;
str += '</' + key + '>';

问题是:如果value包含像'&''>''<'这样的字符怎么办?转义这些字符的最好方法是什么?

或者有没有可以转义XML实体的javascript库?

EN

回答 7

Stack Overflow用户

发布于 2015-01-16 16:32:39

在相同的结果下,这可能会更有效率:

代码语言:javascript
复制
function escapeXml(unsafe) {
    return unsafe.replace(/[<>&'"]/g, function (c) {
        switch (c) {
            case '<': return '&lt;';
            case '>': return '&gt;';
            case '&': return '&amp;';
            case '\'': return '&apos;';
            case '"': return '&quot;';
        }
    });
}
票数 122
EN

Stack Overflow用户

发布于 2012-02-23 08:04:55

如果你有jQuery,这里有一个简单的解决方案:

代码语言:javascript
复制
  String.prototype.htmlEscape = function() {
    return $('<div/>').text(this.toString()).html();
  };

像这样使用它:

"<foo&bar>".htmlEscape(); -> "&lt;foo&amp;bar&gt"

票数 21
EN

Stack Overflow用户

发布于 2020-01-29 22:46:39

注意,如果XML中有XML,那么所有的正则表达式都不是很好。

而是在字符串上循环一次,并替换所有转义字符。

这样的话,你就不能在同一个角色身上跑两次。

代码语言:javascript
复制
function _xmlAttributeEscape(inputString)
{
    var output = [];

    for (var i = 0; i < inputString.length; ++i)
    {
        switch (inputString[i])
        {
            case '&':
                output.push("&amp;");
                break;
            case '"':
                output.push("&quot;");
                break;
            case "<":
                output.push("&lt;");
                break;
            case ">":
                output.push("&gt;");
                break;
            default:
                output.push(inputString[i]);
        }


    }

    return output.join("");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7918868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档