从php json_encode到jquery decode

时间:2014-09-02 13:47:42

标签: javascript jquery

我正在使用一个众所周知的" hack" (json编码功能),以防止一些字符搞砸我的HTML,我从API接收一个描述字段,可以内容单引号或双引号(和其他特殊字符)。所以:

<div class="someThing" data-fulldescription=<?=json_encode($textFromApi);?>>
  ...
</div>

现在我使用jquery读取该数据字段,然后将其打印在div中:

$('#brand-modal-content').html($(this).parents('.someThing').data('fulldescription'));

问题是,引号现在由PHP函数编码,而某些字符被&#34; \ u00e8&#34;或&#34; \ u00f9&#34;,有没有办法使用jquery重新格式化文本?

1 个答案:

答案 0 :(得分:2)

您正在以非常错误(甚至是不安全)的方式将内容注入HTML。这样做:

data-fulldescription="<?=htmlspecialchars(json_encode($textFromApi));?>"

这样,无论内部是什么,JSON都将被正确编码并安全注入;然后,您可以像这样解码它:

var decoded = JSON.parse($(this).parents('.someThing').data('fulldescription'));

这些步骤的组合将完美地保留JSON,无论它代表什么(如果您认为它是一个字符串,您可以采用快捷方式,但为什么不始终100%安全?)。然后,您可以使用解码后的值执行任何操作。