2017-08-02 22 views
1

PHPを使用してデータベースに接続し、ほとんどの文字列を取得しています。特殊文字の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)); 

によって:私はこれをやって取得する場合、これらの文字列は...それゆえ、彼らは「E」、「C」、「U」、などをたくさん持っている、

ポルトガル語で書かれた文章ですそうすることutf8_decode「ç」のような文字は「?」で置き換えられます。例えば。私がデコードをしないと、テキストはデータベースに正しく格納されているので、すべて正常です。しかし、私がデコードをしないと、json_encodeヌルという文字列を取得します。

どのように文字を保持しますか?私はすでに試しましたmb_convert_encodinghtmlspecialchars、何も動作していないようです。

EDIT:このスクリプトはAndroidアプリからリクエストされていました。しかし、私はブラウザでテストしていましたが、実際にUTF8で文字列をエンコードし、フラグが付いたjsonを送信すると思われます。JSON_UNESCAPED_UNICODE下記のように解決されますが、ブラウザはまだ悪い文字を返します。

$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