Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript php json_编码创建未缩放的新行运算符_Javascript_Php_Arrays_Json - Fatal编程技术网

Javascript php json_编码创建未缩放的新行运算符

Javascript php json_编码创建未缩放的新行运算符,javascript,php,arrays,json,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); e

以下是我的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>';
问题:

为什么php的
json\u encode()
会在源php数组中的实际换行符中创建未被替换的
\n
字符,而这些字符在json字符串中无效

建议避开源换行符,即从
\n
转换为
\\n
。那么为什么PHP的
json\u encode()
不应该在这里这么做呢?目前,它正在直接创建一个json字符串,该字符串阻塞javascript中的
json.Parse()
。例如,尝试在控制台中运行以下命令:

JSON.parse(“{”errors:[“Error text\n”],“orders_implemented”:0}”)

VM1628:1未捕获的语法错误:JSON中位于位置的意外标记 22 在JSON.parse()处 时间:1:6

如果我添加斜杠以转义换行符或将其全部删除,则错误消失


是否有
json\u encode()
的标志,我应该使用它来处理特殊/控制字符的转义,这是我在PHP手册中没有看到的?

json\u encode的输出很好

问题是,当您试图通过使用
'
将其包装来将其转换为JavaScript字符串文字时,
\n
会被解析为JS字符串中的新行

当您尝试将该字符串解析为JSON时,它有一个真正的新行

要转换为JavaScript字符串,还必须转义其中的任何特殊字符

由于JSON(或多或少)是JavaScript的一个子集,
JSON\u encode
将实现以下功能:

var-json=;
var obj=JSON.parse(JSON);
控制台日志(obj);
……但这是一种愚蠢的做法

只需跳过将其视为JSON的部分,将其视为JavaScript即可

var obj=;
控制台日志(obj);

json\u encode的输出正常

问题是,当您试图通过使用
'
将其包装来将其转换为JavaScript字符串文字时,
\n
会被解析为JS字符串中的新行

当您尝试将该字符串解析为JSON时,它有一个真正的新行

要转换为JavaScript字符串,还必须转义其中的任何特殊字符

由于JSON(或多或少)是JavaScript的一个子集,
JSON\u encode
将实现以下功能:

var-json=;
var obj=JSON.parse(JSON);
控制台日志(obj);
……但这是一种愚蠢的做法

只需跳过将其视为JSON的部分,将其视为JavaScript即可

var obj=;
控制台日志(obj);

这不是Shopify的问题,严格来说,这是一个关于php的
json_encode
以及与
json结合使用的问题。parse
问题您是否解析html中的
$json
?因为浏览器会注意到换行符!或者如何测试
JSON.parse('{“errors”):[“Sh
line?如果您无法控制错误的输出,只需在
$response
中手动添加
addslashes
,这不是Shopify问题,严格来说,这是一个关于php的
json\u编码
以及与
json结合使用的问题。解析
问题您是否解析html中的
$json
print$json
)因为浏览器会注意到断线,或者如何测试<代码> JSON.PARSE(‘{错误’):[ SH < /代码>行?如果不能控制错误的输出,只需在<代码> $Rebug < /代码>中手动添加<代码> AdSLASS/<代码>,我看到了,所以这被看作是在JSON值中间出现的实际断线,从而导致“未终止字符串文字"错误?我已经设法验证了
\n
在json字符串中确实是完全有效的
\n
在JavaScript字符串中是有效的。
\n
在json字符串中是有效的。json字符串表达式中的
\n
作为JavaScript字符串将在json字符串中放入新行。新行无效要查看此运行
“{”errors:[“Error text\n”],“orders_implemented”:0}“
直接在浏览器的JS控制台中。然后将结果(包括换行符)复制到JSON Lint中。问题的完美演示就在那里!我主要是一个PHP高手,因此我的大脑习惯于只看到双引号中的字符串解释
\n
,而单引号中的
\n
是字面意思。我没有意识到一个JavaScript字符串将解释<代码> \n>代码>作为一个文字新行(类似于PHP双引号字符串),因此我理解的缺陷。我看到了,所以这被看作是出现在JSON值中间的一个实际的断线,从而导致了一个“未终止的字符串文字”。错误?我已经设法验证了
\n
在json字符串中确实是完全有效的
\n
在JavaScript字符串中是有效的。
\n
在json字符串中是有效的。json字符串表达式中的
\n
作为JavaScript字符串将在json字符串中放入新行。新行无效要查看此运行
“{”errors:[“Error text\n”],“orders_implemented”:0}“
直接在浏览器的JS控制台中。然后将结果(包括换行符)复制到JSON Lint中。问题的完美演示就在那里!我主要是一个PHP高手,因此我的大脑习惯于只看到双引号中的字符串解释
\n
,而单引号中的
\n
是字面意思。我没有意识到JavaScript字符串会将
\n
解释为一个字面新行(就像PHP双引号字符串),因此我的理解存在缺陷。
$response: Array
(
    [errors] => Array
        (
            [0] => Error text

        )

    [orders_fulfilled] => 0
)

$json: {"errors":["Error text\n"],"orders_fulfilled":0}
var json = <?php json_encode(json_encode($foo)); ?>;
var obj = JSON.parse(json);
console.log(obj);
var obj = <?php json_encode($foo); ?>;
console.log(obj);