我有一个使用json_encode
在php中编码的数组 $params = array(1=>'something','2'=>'two');
当我使用json编码对其进行编码时,它将使用双引号对其进行编码,这本身就很好但是我试图将其嵌入到锚标记中并且双引号会弄乱属性。
<a class="btn ajax" data-method="test" data-params="{"one":"something","2":"two"}" href="#">test ajax link</a>
显然,data-params属性中的第二个双引号打破了链接。
所以我所做的是将字符串转换为单引号,但我需要将其重新转换为双引号以便能够在javascript中解析;
var string = {'one':'something','2':'two'} ;
JSON.parse会在该字符串上失败,我试过
var jsonString = dataParams.replace('\'', '"');
但似乎只转换第一个单引号然后停止。有什么想法吗?
答案 0 :(得分:3)
更好的方法是使用htmlentities()
function将"
编码为"
,这意味着您可以将其data-*
插入。当您使用JavaScript检索它时,它们将显示为"
,这意味着您可以立即JSON.parse
;
<a data-foo="<?php echo htmlentities(json_encode(array('demo' => 'test'))); ?>">Hey</a>
<script>alert(JSON.parse(document.getElementsByTagName("a")[0].dataset.foo).demo);</script>
答案 1 :(得分:0)
请改用:
var jsonString = dataParams.replace(/'/g, '"');