【问题标题】:Getting rid of ' " ' from json_encode [duplicate]从 json_encode 中删除 '"' [重复]
【发布时间】:2016-11-01 16:41:22
【问题描述】:

我有一个代码 sn-p,它将 PHP 数组编码为 json,但是当我尝试解析它时,它给了我错误,因为“存在于值中”

PHP 数组

$arr = array( id => 1, msg => <h1>Some text</h1> <img src="http://test.png">);

js代码

var json = JSON.parse('<?php echo json_encode($arr);?>');

当我对上述错误进行 json_encode 时,它​​会用双引号将字符串括起来,这会破坏我的 JSON.parse 函数。我尝试使用替换函数,但在 json_encode 之后它会自动在对象的字符串值周围添加双引号。

所以我尝试用 ' 替换所有 " 但它正在替换所有双引号。我在想是否可以通过正则表达式来替换 html 元素或其他内容中的 " 。我无法在保存时转义 HTMl,因为数据库中已经存在大量数据并且更改它有点困难。

【问题讨论】:

  • $arr = array( id =&gt; 1, msg =&gt; "&lt;h1&gt;Some text&lt;/h1&gt; &lt;img src=\"http://test.png\"&gt;")
  • 你期望什么。 json 字符串 必须 包裹在 " 中。删除它们会导致 json 语法错误。更改 json_encode 生成的内容显然会引入语法错误。您不能通过修改 json 字符串来重新定义 json 应该是什么,然后期望 json 解析器接受您正在生成的错误文本。
  • 你不需要这样做:var json = &lt;?= json_encode($arr); ?&gt; 应该足够了。
  • 嗨@Blazemonger 我无法转义html中的双引号,因为它已经保存在数据库中。
  • json_encode() 将使用反斜杠转义双引号并始终生成有效的 JSON。也许你的解码器坏了?

标签: javascript php regex


【解决方案1】:

在 PHP 打印它的那一刻,JSON 就已经被解析了。

var json = <?php echo json_encode($arr); ?>;

那你什么时候需要JSON.parse()

JSON.parse() 将已经转义的 JSON 转换为 JSON/Javascript 对象。

JSON.stringify() 正好相反,将 JSON 转义为字符串。

【讨论】:

    【解决方案2】:

    在将 JSON 插入 JavaScript 时,无需将其用引号括起来,甚至无需尝试解析它,因为 JSON 是有效的 JavaScript 对象或数组字面量。通过删除引号,您消除了需要转义引号的问题。

    var json = <?php echo json_encode($arr);?>;
    

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 2014-11-07
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 2013-04-20
      相关资源
      最近更新 更多