【问题标题】:PHP json_encode return unescaped 'PHP json_encode 返回未转义 '
【发布时间】:2014-07-29 14:23:33
【问题描述】:

我遇到了在 js 中解析 json 编码对象的问题。 JSON.parse(word_array); 错误 Uncaught SyntaxError: Unexpected identifier

我的调查显示对象word_array不存在,因为PHP中的格式错误:它内部有一个未转义的单引号',因此使js认为它是字符串的结尾。

接下来我形成编码:

echo "<script>var word_array = '";
echo  json_encode($word_set);
echo "';\n";

据我所知,json_encode 应该转义所有不受欢迎的字符,例如',但事实并非如此。 可能是什么问题?

我的php版本:Version PHP: 5.3.13 而$word_set 是关联数组。数组:

$word_set = array();
while($stmt->fetch())
{
  $word_set_tmp[] = array(
    'word' => $word, 
    'definition' => $def
  );
  array_push ($word_set,$word_set_tmp);
} 

【问题讨论】:

  • 请显示 json_encode 的输出,显示声明的未转义引号
  • 当你可以立即分配 json 时,为什么要分配字符串然后解析它(不用引号括起来)。
  • 我剪掉了末端(因为它很大)。 var word_array = '[{"word":"Abeyance","definition":"a temporary suspension of activity."},{"word":"Akimbo","definition":"having one's hands in a bent position on the hips."}
  • one's中的问题
  • @Cthulhu 有趣的事情:你的建议也解决了他的问题,因为 afaik ' 不应该被转义

标签: javascript php json


【解决方案1】:

问题是您将数组声明用单引号括起来,删除它们,一切都很好:

echo "<script>var word_array = " . json_encode($word_set) . ";";

作为旁注,我发现当我必须将 php 与其他任何东西(html、js)混合时,最好退出 php 模式并编写 html/js,回显所需的 php 变量,而不是回显 html/js :

<?php 
    $word_set = $db->somfunc();
?>
<script>
    var word_array="<?php echo json_encode($word_set);?>";
    alert(word_array[1].definition);
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2016-09-16
    • 2017-05-01
    • 2016-02-24
    • 2017-02-21
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多