ajm*_*way 0 javascript php arrays json
这是我的php:
$response = array(
'errors' => $this->errors,
'orders_fulfilled' => $this->orders_fulfilled,
);
echo '<pre>$response: ' . print_r($response, true) . '</pre>';
$json = json_encode($response, JSON_HEX_APOS);
echo '<pre>$json: ' . print_r($json, true) . '</pre>';
Run Code Online (Sandbox Code Playgroud)
这显示了以下输出:
Run Code Online (Sandbox Code Playgroud)$response: Array ( [errors] => Array ( [0] => Error text ) [orders_fulfilled] => 0 ) $json: {"errors":["Error text\n"],"orders_fulfilled":0}
题:
当它们在 json 字符串中无效时,为什么 php 会从源 php 数组中的实际换行符中json_encode()创建未转义的\n字符?
我在此接受的答案看到的建议是为了躲避源换行,即从转换\n到\\n。那么为什么 PHPjson_encode()不应该在这里这样做呢?就目前而言,它直接创建了一个JSON.Parse()在 javascript中阻塞的 json 字符串。例如,尝试在控制台中运行它:
JSON.parse('{"errors":["Error text\n"],"orders_fulfilled":0}');
VM1628:1 Uncaught SyntaxError: Unexpected token in JSON at position 22 at JSON.parse () at :1:6
如果我添加一个斜杠来转义换行符或完全删除它,错误就会消失。
有没有json_encode()我应该使用的标志来处理我在 PHP 手册中没有看到的特殊/控制字符的转义?
的输出json_encode很好。
问题是,当您尝试通过用 包装将其转换为 JavaScript 字符串文字时', 将\n被解析为JS 字符串中的新行。
当您尝试将该字符串解析为 JSON 时,它会有一个真正的新行。
要转换为 JavaScript 字符串,您还必须转义其中的任何特殊字符。
由于 JSON 是(或多或少)JavaScript 的一个子集,所以json_encode会这样做:
var json = <?php json_encode(json_encode($foo)); ?>;
var obj = JSON.parse(json);
console.log(obj);
Run Code Online (Sandbox Code Playgroud)
……但这是一种愚蠢的方法。
只需跳过将其视为 JSON 的部分,而将其视为 JavaScript。
var obj = <?php json_encode($foo); ?>;
console.log(obj);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |