我有=
的字符串,而不是\u003d
。我用str_replace
替换了它。之后我把它保存在json文件中。文件\
已替换为\\
中的\u003d
。但是如果回显那个字符串就没有\\
。我试图使用JSON_UNESCAPED_SLASHES
标志,但它没有帮助。如果仅使用一个\
保存文件,我该怎么办?
代码:
<?php
$value = PUT A RANDOM VALUE;
$value_base64 = base64_encode($value);
$value_replaced = str_replace('=', '\u003d', $value_base64);
//This array is just an example
$array = [
"var1" => null,
"var2" => array(
"var2_1" => null,
"value" => $value_replaced,
)
];
$json = json_encode(ARRAY WITH $value_replaced AND OTHER VARIABLES, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
?>
我的情况下的变量(我不能将它们粘贴在这里,因为它们太大了):
[`$value (not url)`](http://pastebin.com/EJcxUaBR),
[`$value_base64`](http://pastebin.com/vJ9yH7GD),
[`$value_replaced`](http://pastebin.com/41zrsE1n),
[`$json`](http://pastebin.com/3TYRHUQT).
答案 0 :(得分:0)
json_encode
包含双\
的原因是因为JSON语法将\
视为特殊符号,需要对其进行转义。当您将\u003d
传递给json_encode()
时,它认为它只是需要转义的标准字符串。
当您运行$value_replaced = str_replace('=', '\u003d', $value_base64);
时,您基本上说的是,您希望字符串有6个字符=
,而不是字符\u003d
。然后将其视为如此,导致json_encode
在需要的地方转义反斜杠,以使JSON有效。
当您为结果运行json_decode()
时,反斜杠将再次转换为单数形式。