我正在使用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也可以是一个骗局。 –