我的脚本中的以下变量有问题:
var jsondatacats = eval(currentbtn.attr("data-jsond"));
它运作良好,直到data-json attr得到一个字符串,其中一个值包含一个单引号“ How-to's”。
展望未来,我将确保我的PHP能够捕获到该错误,但是此刻,我想知道是否可以解决此问题并阻止JS脚本在JS解决方案中引发错误。
有可能吗?
答案 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="{"message":"Hello 'world'"}"></i>