2016-03-19 30 views
0

我做了一個RESTAPI是相當不錯的了,在我的腳本(核心文件)的頂部,我已經聲明這一點:json_decode無法反序列正確

header('Content-Type: application/json;charset=utf-8'); 

現在的問題是,當我將客戶端的json傳遞給我的API。這個問題通常與POSTPUT方法有關。這隻有當我通過這種類型的JSON捲曲:

curl -i -d '{"test": "èè"}' 

你如何看到我有一些重音字母。所以,當我調用這個函數:

$params = json_decode(file_get_contents("php://input"), true); 

$params變量回歸NULL。相反,如果我的JSON是這樣的:

curl -i -d '{"test": "This is a test"}' 

所有工作良好,$params變量有這樣的物價穩定措施:

array(1) { 
    ["test"]=> 
    string(14) "This is a test" 
} 

我想,在這個功能的特殊性質造成的問題..有人有解決方案?

+0

您的終端是UTF-8安全嗎?即使使用了'{「test」:「èè」} – fusion3k

+0

@ fusion3k,我也得到了正確的結果。我在'MINGW64' git控制檯以及Chrome擴展(Adavanced RestFul API)上對此進行了測試。他們都報告了相同的結果。 – Dillinger

+0

請進入聊天室 – fusion3k

回答

2

您可以使用正則表達式來確定輸入行是否包含重音字符。

<?php 

    preg_match("/[À-ÿ].*/", $input_line, $output_array); 

    if(sizeof($output_array) > 0){ 
    echo "$input_line has accented characters"; 
    } 

?> 

您還可以看看URL encoding,因爲我認爲這個問題是存在的。

+0

正則表達式?真?這是缺乏'json_decode'?有沒有其他方法可以解決這個問題? – Dillinger

+0

在提交 – Xorifelse

+0

uhm之前,[編碼](http://php.net/manual/en/function.urlencode.php)也有一種可能的方法,urlencode()似乎很有趣。我應該每次需要解碼json時使用它,還是可以在API的某個部分自動執行此操作? – Dillinger