PHP从文件中读取字符串问题

时间:2023-01-04 14:42:30

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函数才能转换成功!


PHP从文件中读取字符串问题