2017-08-02 144 views
1

我正在使用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_encodinghtmlspecialchars,似乎没有任何工作。

编辑:此脚本正在被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); 
+0

你的DB表使用哪个字符集? – Peter

+0

JSON应该是UTF-8,所以你不需要解码它。你在哪里得到NULL – RiggsFolly

+0

看到这个如果你还没有https://stackoverflow.com/questions/279170/utf-8-all-the-way-through也可以是一个骗局。 –

回答

1

utf8_decode是什么改变字符转换为“?”。你不应该那样做 - 只是按照原样使用数据而不进行处理。在json_encode上使用选项JSON_UNESCAPED_UNICODE,它应该工作。

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

但是然后json_encode将检索它们作为null谁请求该脚本的人。我测试了它... – edwardffs