1. 程式人生 > >PHP從檔案中讀取字串問題

PHP從檔案中讀取字串問題

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函式才能轉換成功!

這裡寫圖片描述