如何将json和特殊字符从php编码为javascript?

时间:2018-04-03 12:20:35

标签: javascript php jquery

在我的数据库中,我将json保存在名为usp-custom-12的自定义字段中,如下所示:

[{"Mamma":["Papa"]}]

然后我尝试解码

<?php
  $jsonTable = usp_get_meta(false, 'usp-custom-12');
?>
var data = <?php echo htmlspecialchars_decode($jsonTable); ?>;

但是它给了我

 var data = "[{"Mamma":["Papa"]}]";

控制台日志错误:

  

未捕获的SyntaxError:意外的标识符

完整代码:

<?php
  $jsonTable = usp_get_meta(false, 'usp-custom-12');
?>
var data = "<?php echo htmlspecialchars_decode($jsonTable); ?>";

console.log(data);

data = JSON.parse (data);
data.forEach(obj => {
  Object.keys(obj).forEach(key => {
    $('#newTable thead tr').append($('<th>').text(key));

    obj[key].forEach((e, i) => {
      if(!$("#newTable tbody tr:eq("+i+")").length) $("<tr>").appendTo($("#newTable tbody"));
      $("#newTable tbody tr:eq(" + i + ")").append($('<td>').text(e))
    })
  })
});

在这个jsFiddle中,如果你单击保存表,你会看到它生成一个与顶部表相同的表,这也是在控制台中登录正确的json:https://jsfiddle.net/fbh0o67o/74/

3 个答案:

答案 0 :(得分:4)

$jsonTable包含一个带有html实体编码的JSON字符串,因为它已经是JSON,你只需解码html etities并按原样回显它。不需要JSON解码,不需要引用。只需HTML解码并将其回显到您的javascript中。

var data = <?php echo htmlspecialchars_decode(usp_get_meta(false, 'usp-custom-12')); ?>;

data.forEach(obj => {
   // Loop stuff here...
});

答案 1 :(得分:3)

问题在于字符串"mama"中的引号需要使用addslashes方法来转义这些引号。

尝试使用以下内容:

var data = "<?php echo addslashes(htmlspecialchars_decode($jsonTable)); ?>";

答案 2 :(得分:1)

JSON到PHP:

json_decode($string);

如果您使用可选参数$assoc作为true - json_decode($string, true)将成功返回关联数组。

PHP到JSON:

json_encode($array);

PHP手册: json_encode() json_decode()