ホームページ >バックエンド開発 >PHPチュートリアル >Thinkphp3.1.3 が Oracle に接続し、奇妙なエンコーディングに関連する json 関連の問題を返す

Thinkphp3.1.3 が Oracle に接続し、奇妙なエンコーディングに関連する json 関連の問題を返す

WBOY
WBOYオリジナル
2016-06-13 12:21:261030ブラウズ

Thinkphp3.1.3 が oracle に接続し、json を返します。 奇妙なエンコーディングの問題
環境: thinkphp3.1.3 oracle10.2g、oracle は ZHS16GBK エンコーディングを使用していますが、問題なく接続してデータを確認できます。サーバーは Apache php5 です。Apache を初めて起動した後、単純な選択クエリを実行すると、PHP に付属の ajaxreturn または json_encode() を使用すると、返された json の中国語が文字化けしますが、再度更新すると、正しい中国語が表示されます。と表示されますが、今後も同じです。これは正常です。データベースへの接続が切断された後、再度確認するとコードが文字化けすることが予想されます。リフレッシュ後は正常に戻ります。 。 。 Apacheを再起動するたびに、最初のクエリでこの現象が発生します。iconvまたはmb_convert_encodingを使用して、返されたjsonのエンコーディングを変更しようとしましたが、最初のクエリをファイルにキャッシュしたときにこの現象が発生します。初めて見たところ、エラー中国語のキャッシュファイルに中国語がありましたが、エンコーディングはGB2312でした。キャッシュファイルを削除し、更新後にキャッシュを再生成すると、キャッシュファイルのエンコーディングはutf-8になります。 。 。試してみましたが、TPフレームワークを使わずにPHPで直接データベースに接続してクエリを実行すると、初回でも何度でも正しい中国語が出てきます。この奇妙な問題は私にとって不可解です、助けてください。 。 。
------解決策のアイデア----------------------
中国語キャッシュの最初のエラーがありますファイル内は中国語ですが、エンコーディングは GB2312 です。キャッシュ ファイルを削除し、更新後にキャッシュを再生成します。キャッシュ ファイルのエンコーディングは utf-8 になります。

更新後の内容は以前と同じですか?エンコーディングが変わった?
------解決策のアイデア----------------------
1. thinkphp は utf-8 文字を使用します。作業を設定します。gbk バージョンはありません
2。json_encode は utf-8 中国語のみをサポートします
したがって、受信と送信の両方が utf-8 である必要があるため、oracle に接続するときに ZHS16GBK を宣言するのは間違っています。これが問題の根源です

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Thinkphp 入門 1 (45)次の記事:Thinkphp 入門 1 (45)