PHP在使用file_get_contents
从文件或者请求body中读取字符串时会遇到一种问题:
就是当文件中字符串收尾两端为双引号""
时,PHP变量被赋值后无法解析字符串中的转义符等信息。
例如:文件text.text
内容:
"\"abc\nbcd\""
PHP代码:
$str = file_get_contents('text.txt');
$str = (trim($str));
echo $str;
执行结果:
"\"abc\nbcd\""
这不是我们想要的结果,那怎么办呢,这个时候有一个函数可以利用:json_decode
我们把PHP代码改成如下:
$str = file_get_contents('text.txt');
$str = (trim($str));
echo json_decode($str);
这个时候执行的结果是这样的:
"abc bcd"
这才是我们想要的。
这个问题有什么实际作用和启示呢。
当我们使用file_get_contents('php://input')
从客户端获取的数据如果是这个形式的json字符串时,如:
"{\"access_token\": \"279A4IBAAqLBtsrb2LErDEM4U7h9oiJMFSDVxFR0J0d1AyJ5J\"}"
先打印出来看一下:
$str =file_get_contents('text.txt');
$str = (trim($str));
echo $str;
结果:
"{\"access_token\": \"279A4IBAAqLBtsrb2LErDEM4U7h9oiJMFSDVxFR0J0d1AyJ5J\"}"
那该如何才能转换成想要的数组形式呢?
先使用json_decode
看一下:
$str =file_get_contents('text.txt');
$str = (trim($str));
$json = json_decode($str);
echo $json;
结果:
{"access_token": "279A4IBAAqLBtsrb2LErDEM4U7h9oiJMFSDVxFR0J0d1AyJ5J"}
这时候的结果才是解析转义字符后得到的我们熟悉的真正的json
字符串!
虽然还不是数组,但接下来我们都知道该怎么做了:
$str =file_get_contents('text.txt');
$str = (trim($str));
$json = json_decode($str); //第一次使用json_decode
$arr = json_decode($json,true); //第二册使用json_decode
print_r($arr);
结果:
Array
(
[access_token] => 279A4IBAAqLBtsrb2LErDEM4U7h9oiJMFSDVxFR0J0d1AyJ5J
)
这是最后的结果了。
重点在于两次使用json_decode
函数才能转换成功!