PHP從檔案中讀取字串問題
阿新 • • 發佈:2019-01-25
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
函式才能轉換成功!