Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何转义包含多个双引号的html字符串_Javascript_Jquery_Html_Json_Lightbox - Fatal编程技术网

Javascript 如何转义包含多个双引号的html字符串

Javascript 如何转义包含多个双引号的html字符串,javascript,jquery,html,json,lightbox,Javascript,Jquery,Html,Json,Lightbox,我从ajax请求中收到以下字符串: As per json doc, "quotes must be escaped " 这存储在data.description中,并作为以下内容嵌入到模板中: '<a href="#"' + 'data-title="' + data.description + '"></a>' 作为: 现在,由于data.description包含多个引号,javascript将它们假定为多个参数并抛出错误。我搜索了许多其他Stackoverfl

我从ajax请求中收到以下字符串:

As per json doc, "quotes must be escaped "
这存储在data.description中,并作为以下内容嵌入到模板中:

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

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


谢谢

仅更改与数据标题周围的引号相同的引号。像这样:

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

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

您还可以通过使用两个单引号(如以下字符串)来伪造它。替换/[]+/g,,它将为您伪造双引号

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

使用replace和regexp对其进行转义:

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

只有在使用jQuery时,才允许jQuery为您执行此操作

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

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

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

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

下面是一个演示解决方案的示例。

我使用了它,但它给出了相同的结果。我不明白为什么将“”改为“”会转义html字符串。@user31782它不会转义,但它会解决问题!看看这个例子!不,不,我展示的是随机选择的字符串。json数据可能具有、、和“”的任意组合,但发生了一些奇怪的情况。我的数据标题变为数据标题=根据json文档,\n它将转义的引号作为结束引号。@user31782我刚刚测试过,您是对的。似乎最好的方法是将它们改为其他引号。这是一个带引号的字符串。这是一个带引号的“字符串”。查看更新!第一个方法出现错误,因为HtmlEncodedata.description有问题,因为data.description中有双引号。但是您的第二个方法给了我另一个执行$mydiv.appenddata.secription的想法,它在哪里给出了错误?检查这个:你按照json文档在那里添加了单引号,引号必须转义,但是我得到的json响应没有引号,我不知道它有多少双引号。我不明白。像这些替换一样替换所有引用。我对字符串使用了单引号,请参见代码笔。当然,可以对字符串使用双引号,但必须使用单引号将其反转为数据标题。也许是我,但我不明白问题所在。你能复制它吗?
var tpl = $('<a href="#"></a>');
tpl.data('title', data.description);
var desc = data.description.replace(/'/g, "&#39;").replace(/"/g, "&#34;");

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