我正在使用PHP連接到數據庫並檢索大多數字符串。這些字符串是寫在葡萄牙的句子,因此,他們有足夠的「E」,「C」,「U」等......特殊字符PHP UTF8編碼問題
當檢索我這樣做:
$res = sqlsrv_query($conn,$query);
$array_req = array();
while($rs = sqlsrv_fetch_object($res)){
// Get info request
$temp_req = array();
$temp_req['id'] = $rs->id;
$temp_req['title'] = utf8_decode($rs->title);
...
}
echo json_encode(array('result'=>$array_req));
而且通過這樣做utf8_decode像「ç」這樣的字符被替換爲「?」例如。如果我沒有進行解碼,那麼文本就可以正常存儲在數據庫中,所以文本是完全正確的。但是,如果我不做解碼,json_encode將檢索字符串爲null。
如何保留字符?我已經試過mb_convert_encoding,htmlspecialchars,似乎沒有任何工作。
編輯:此腳本正在被Android應用程序請求。然而,我正在瀏覽器上測試,似乎如果我實際上編碼字符串在UTF8併發送json與JSON_UNESCAPED_UNICODE標誌下面摘下,瀏覽器仍然返回壞字符,但Android應用程序讀取它們正常。去圖... 這是工作代碼:
$res = sqlsrv_query($conn,$query);
$array_req = array();
while($rs = sqlsrv_fetch_object($res)){
// Get info request
$temp_req = array();
$temp_req['id'] = $rs->id;
$temp_req['title'] = utf8_encode($rs->title);
...
}
echo json_encode(array('result'=>$array_req), JSON_UNESCAPED_UNICODE);
你的DB表使用哪個字符集? – Peter
JSON應該是UTF-8,所以你不需要解碼它。你在哪裏得到NULL – RiggsFolly
看到這個如果你還沒有https://stackoverflow.com/questions/279170/utf-8-all-the-way-through也可以是一個騙局。 –