PHP保存文件\

时间:2015-11-06 12:29:51

标签: php

我有=的字符串,而不是\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).

1 个答案:

答案 0 :(得分:0)

json_encode包含双\的原因是因为JSON语法将\视为特殊符号,需要对其进行转义。当您将\u003d传递给json_encode()时,它认为它只是需要转义的标准字符串。

当您运行$value_replaced = str_replace('=', '\u003d', $value_base64);时,您基本上说的是,您希望字符串有6个字符=,而不是字符\u003d。然后将其视为如此,导致json_encode在需要的地方转义反斜杠,以使JSON有效。

当您为结果运行json_decode()时,反斜杠将再次转换为单数形式。