我收到了来自我的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但在我的情况下这是可能的。
由于
答案 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, "'").replace(/"/g, """);
'<a href="#"' + 'data-title="' + desc + '"></a>'
这里有Fiddle来演示解决方案。