PHP UTF8编码问题与特殊字符

时间:2017-08-02 16:30:37

标签: php encoding utf-8

我使用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);

1 个答案:

答案 0 :(得分:1)

utf8_decode是将字符更改为“?”的内容。你不应该这样做 - 只需按原样使用数据而不处理它。在json_encode上使用选项JSON_UNESCAPED_UNICODE,它应该可以工作。

json_encode(array('result'=>$str), JSON_UNESCAPED_UNICODE);