2017-08-02 2 views
1

Ich verwende PHP, um eine Verbindung zu einer Datenbank herzustellen und meist Strings abrufen. Diese Strings sind Sätze in Portugiesisch geschrieben, daher haben sie viel "é", "C", "ú", etc ...PHP UTF8 Codierung Problem mit Sonderzeichen

Beim Aufrufen Ich tue dies:

$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)); 

Und durch dabei utf8_decode Zeichen wie "ç" werden durch "?" beispielsweise. Wenn ich die Decodierung nicht mache, ist der Text gut, da er korrekt in der Datenbank gespeichert ist. Wenn ich jedoch die Decodierung nicht mache, ruft der json_encode die Zeichenfolgen als null ab.

Wie behalte ich die Zeichen? Ich habe bereits versucht mb_convert_encoding, htmlspecialchars, scheint nichts zu funktionieren.

EDIT: Dieses Skript wurde von einer Android App angefordert. Allerdings habe ich im Browser getestet und es scheint, wenn ich tatsächlich die Zeichenfolgen in UTF8 codieren und senden Sie die JSON mit der Flagge JSON_UNESCAPED_UNICODE unten, der Browser gibt immer noch schlechte Zeichen, aber die Android-App liest sie in Ordnung. Go figure ... Dies ist der Arbeitscode:

$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

Welchen Zeichensatz verwendet Ihre DB-Tabelle? – Peter

+0

JSON soll UTF-8 sein, also müssen Sie es nicht entschlüsseln. Wo erhalten Sie NULL – RiggsFolly

+0

Sehen Sie, wenn Sie nicht bereits https://stackoverflow.com/questions/279170/utf-8-all-the-way-through könnte auch ein Betrogener sein. –

Antwort

1

utf8_decode ist, was die Zeichen in verändert "?". Sie sollten das nicht tun - verwenden Sie einfach die Daten wie sie sind, ohne sie zu verarbeiten. Verwenden Sie die Option JSON_UNESCAPED_UNICODE auf json_encode und es sollte funktionieren.

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

Aber dann wird der json_encode sie als null für denjenigen abrufen, der dieses Skript anfordert. Ich habe es getestet ... – edwardffs