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);
Welchen Zeichensatz verwendet Ihre DB-Tabelle? – Peter
JSON soll UTF-8 sein, also müssen Sie es nicht entschlüsseln. Wo erhalten Sie NULL – RiggsFolly
Sehen Sie, wenn Sie nicht bereits https://stackoverflow.com/questions/279170/utf-8-all-the-way-through könnte auch ein Betrogener sein. –