用JS逃逸

时间:2019-04-09 00:04:38

标签: javascript jquery

我的脚本中的以下变量有问题:

var jsondatacats = eval(currentbtn.attr("data-jsond")); 

它运作良好,直到data-json attr得到一个字符串,其中一个值包含一个单引号“ How-to's”。

enter image description here

展望未来,我将确保我的PHP能够捕获到该错误,但是此刻,我想知道是否可以解决此问题并阻止JS脚本在JS解决方案中引发错误。

有可能吗?

1 个答案:

答案 0 :(得分:1)

要在这里猜测您正在PHP脚本中使用类似的东西

<i data-jsond='<?= json_encode($someVariable) ?>'></i>

这里的问题是,JSON输出中的任何单引号都会过早结束您的属性值。如果在属性值两边使用双引号,则会发生同样的情况。

将值注入HTML时,请始终确保正确编码。例如

<i data-jsond="<?= htmlspecialchars(json_encode($someVariable)) ?>"></i>

这将产生类似于以下内容的内容,可以将其解析为JSON

const jsonData = $('#currentButton').data('jsond')
// or jsonData = JSON.parse($('#currentButton').attr('data-jsond'))
$.each(jsonData, function(key, val) { 
  console.info(key, ':', val)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.slim.min.js"></script>
<i id="currentButton" data-jsond="{&quot;message&quot;:&quot;Hello 'world'&quot;}"></i>