我使用PHP连接数据库并检索大部分字符串。这些字符串是用葡萄牙语写的句子,因此它们有很多“é”,“ç”,“ú”等...
检索时我正在执行此操作:
$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_UNESCAPED_UNICODE 的标志发送json,浏览器仍会返回错误的字符但是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);
答案 0 :(得分:1)
utf8_decode
是将字符更改为“?”的内容。你不应该这样做 - 只需按原样使用数据而不处理它。在json_encode上使用选项JSON_UNESCAPED_UNICODE
,它应该可以工作。
json_encode(array('result'=>$str), JSON_UNESCAPED_UNICODE);