1 回答
TA贡献1828条经验 获得超6个赞
你似乎在做两件事:
生成 JSON。
将此类 JSON 插入 JavaScript 字符串文字中。
请记住,JSON 不是 JavaScript。JSON 只是一种纯文本数据格式,而 JavaScript 是一种成熟的编程语言。他们经常感到困惑,因为前者的灵感来自后者的某些数据结构的语法,但这就是相似性结束的地方。
处理#1 很容易:PHP 有一个专门为它设计的函数json_encode()
,根据我的经验,它坚如磐石。
然而,处理#2 并不那么简单。PHP 具有(或好或坏)转义 HTML、URL 或 SQL 中的文字数据的功能,但它从来没有真正具有在 JavaScript 字符串中完成相同工作的特定功能。
我们要编写自己的函数吗?幸运的是没有。这就是 JSON 和 JavaScript 之间的相似性可以帮助我们的地方。碰巧我们也可以json_encode()
用来转义 JavaScript 字符串中的原始输入,因为 JSON 语法是 JavaScript 字符串语法的一个子集。但是... JSON 必须是一个对象或一个数组,不是吗?确实如此。幸运的是,PHP 来救援是因为:
PHP 实现了原始 RFC 7159 中指定的 JSON 超集。
[...]
与参考 JSON 编码器一样,json_encode() 将生成一个简单值的 JSON(即,既不是对象也不是数组)如果给定字符串、整数、浮点数或布尔值作为输入值。虽然大多数解码器会接受这些值作为有效的 JSON,但有些可能不会,因为规范在这一点上是模棱两可的。
换句话说,json_encode()
也会产生 JSON片段。所以你可以这样做:
<?php
$result = 'val01\test\val04'; //these are the data that are get from DB
$example = ['testData' => $result];
$json = json_encode($example);
$javascript = json_encode($json);
?>
<script>
var json = <?php echo $javascript; ?>;
var obj = JSON.parse(json);
</script>
其中呈现:
<script>
var json = "{\"testData\":\"val01\\\\test\\\\val04\"}"
var obj = JSON.parse(json);
</script>
并在浏览器中按预期工作一次:
var json = "{\"testData\":\"val01\\\\test\\\\val04\"}"
var obj = JSON.parse(json);
console.log(obj.testData);
如评论中所述,使用 JSON 作为代理将数据从 PHP 传递到 JavaScript 是完全多余的。请记住:JSON 语法是 JavaScript 语法的主题。这意味着任何有效的 JSON 字符串也恰好是有效的 JavaScript 对象或数组文字。在这个用例中,在 PHP 中编码两次然后在 JavaScript 中解码是没有意义的。
- 1 回答
- 0 关注
- 292 浏览
添加回答
举报