ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで読み込んだファイルが文字化けする場合の解決策

PHP_PHP チュートリアルで読み込んだファイルが文字化けする場合の解決策

WBOY
WBOYオリジナル
2016-07-13 10:22:30753ブラウズ

PHPで読み込んだファイルが文字化けする問題の解決策

PHP 5のストリーム読み込み関数のデフォルトのエンコーディングはUTF-8だったそうですが、従来はPHP 4ではfile_get_contents()がgb2312エンコーディングを直接読み込んでいたのが普通でした。 5になると文字化けしてしまいました。オンラインの解決策には、クロール後に iconv() を使用してトランスコードするように記載されています。それを読んだ後、私は何かが間違っていると感じました。1 つは、iconv ライブラリがコンパイルされていない可能性があることです。そして、より大きな問題は、エンコーディングがストリーム変換に関連していることです (iconv が使用されている場合、PHP は実際にコードを 2 回変換します: stream -> UTF-8 -> GB2312): この忙しい作業は無駄ではありませんか?

私は PHP ドキュメントを注意深く読みました (誰もがコードをどのように書いているかはわかりませんが、ドキュメントは非常に明確です)。 fopen() と file_get_contents() については、「デフォルトは UTF-8 ですが、ユーザーは」と述べています。 Unicode セマンティクスが有効な場合、読み取られたデータのデフォルトのエンコーディングは UTF-8 です。カスタム コンテキストを作成するか、stream_default_encoding() を使用してデフォルトを変更することで、別のエンコーディングを指定できます。)そこで、 stream_default_encoding('gb2312'); を使用してテストしました。 しかし、この関数は PHP 6 でのみサポートされているようです。ただし、確実なパスはなく、使用できる「ユーザー定義のコンテキスト属性」もあります。

ドキュメントをより注意深く読んだ後、最終的にこの問題を解決しました:

//ストリームのエンコード形式を設定します。これは、ネットワークアクセスの場合、ファイルを http

に変更します。

$opts = array('file' =>array('encoding' =>'gb2312'));

$ctxt = stream_context_create($opts);

file_get_contents(ファイル名, FILE_TEXT, $ctxt);

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/848316.html技術記事 PHP でファイルを読み込む際のコード化けの解決策。PHP 5 のストリーム読み込み関数のデフォルトのエンコーディングは、PHP 4 では file_get_contents( を通じて gb2312 エンコーディングを直接読み込むのが普通だったそうです。 )でしたが、5になると文字化けしてしまいました。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。