如何转义具有多个双引号的{html字符串

时间:2017-02-14 14:53:01

标签: javascript jquery html json lightbox

我收到了来自我的ajax请求的以下字符串:

As per json doc, "quotes must be escaped "

它存储在data.description中,并嵌入模板中:

'<a href="#"' + 'data-title="' + data.description + '"></a>'

data-title的值用作弹出灯箱插件的标题。我尝试了以下功能:

var HtmlEncode = function(s) {
            var el = document.createElement("div");
            el.innerText = el.textContent = s;
            s = el.innerHTML;
            return s;
        }

as:

'<a href="#"' + 'data-title="' + HtmlEncode(data.description) + '"></a>'  

现在,由于data.description包含多个引号,因此javascript将它们视为多个参数并抛出错误。我搜索了许多其他Stackoverflow帖子,建议将数据附加到div中并检索其内部HTML但在我的情况下这是可能的。

由于

4 个答案:

答案 0 :(得分:1)

仅更改与data-title周围的引号相同的引号。像这样:

var description = data.description.replace(/"/g, "'");
var template = '<a href="#"' + 'data-title="' + description + '"></a>';

答案 1 :(得分:0)

您可以使用单引号或任何其他符号替换字符串中的双引号,以使其在双引号内起作用。 你可以使用String.replace(/["]+/g,"'")执行此操作,这将用单引号替换字符串中的双引号,reg-ex中的g告诉它使用所有字符串。

你也可以使用2个单引号来伪造它,例如String.replace(/["]+/g,"''"),它会伪造双引号。

var HtmlEncode = function(s) {
        return s.replace(/["]+/g,"''");
    }

答案 2 :(得分:0)

解决方案1 ​​

使用replace和regexp来逃避它:

var HtmlEncode = function(s) {
    return s.replace(/"/g, '\\"').replace(/'/g, "\\'");
}
'<a href="#" data-title="' + HtmlEncode(data.description) + '"></a>'  

解决方案2

让jQuery为你做这件事(只有你使用它)。

var tpl = $('<a href="#"></a>');
tpl.data('title', data.description);

答案 3 :(得分:0)

尝试用HTML实体等效替换引号,然后可以在属性上安全地使用它。

var desc = data.description.replace(/'/g, "&#39;").replace(/"/g, "&#34;");

'<a href="#"' + 'data-title="' + desc + '"></a>'

这里有Fiddle来演示解决方案。