ホームページ  >  記事  >  バックエンド開発  >  PHP_PHPチュートリアルにおける中国語文字化けの原因分析と解決方法

PHP_PHPチュートリアルにおける中国語文字化けの原因分析と解決方法

WBOY
WBOYオリジナル
2016-07-15 13:30:25749ブラウズ

1つ。 1 つ目は、PHP Web ページのエンコーディングです

1。php ファイル自体のエンコーディングと Web ページのエンコーディングは

a と一致する必要があります。gb2312 エンコーディングを使用する場合、php はヘッダーを出力する必要があります。 header("Content-Type: text/html; charset =gb2312")、静的ページに を追加します。すべてのファイルの形式は ANSI であり、メモ帳で開いて、ソース ファイルを上書きして ANSI にエンコードして保存できます。

b. utf-8 エンコーディングを使用する場合、php はヘッダーを出力する必要があります: header("Content-Type: text/html; charset=utf-8")、 の場合、すべてのファイルのエンコード形式は utf-8 です。 utf-8 として保存するのは少し面倒かもしれません。セッションを使用する場合は、editplus を使用して保存できます。パラメータの選択 -> ファイル -> UTF-8 署名で、[常に削除] を選択し、BOM 情報を削除します。

2.php 自体は Unicode ではないため、substr などのすべての関数を mb_substr に変更する必要があります (mbstring 拡張機能をインストールする必要があります)。または、iconv を使用してトランスコードできます。

Ⅱ。 PHP と Mysql の間のデータ対話

PHP とデータベースのエンコーディングは一貫している必要があります

1. mysql 設定ファイル my.ini または my.cnf を変更するのは utf8 でエンコードするのが最適です

2。必要に応じて、データベース操作用の PHP プログラムの前に mysql_query("set names 'encoding'"); を追加します。PHP エンコーディングが gb2312 の場合、mysql エンコーディングは gb2312 です。 -8 の場合、mysql エンコーディングは utf8 になります。このようにすると、データを取得するときに PHP の中国語文字化けがなくなります

3。 PHPはOSと関係があります

WindowsとLinuxではエンコーディングが異なります。 Windows環境でPHP関数を呼び出す際、パラメータがutf-8エンコーディングの場合、move_uploaded_file()、filesize(などのエラーが発生します。これらの関数は、アップロードとダウンロードの処理時によく使用されます。呼び出し時に次のエラーが発生する可能性があります。

<ol class="dp-xml">
<li class="alt"><span><span>[mysql]  </span></span></li>
<li>
<span class="attribute">default-character-set</span><span>=</span><span class="attribute-value">utf8</span><span> </span>
</li>
<li class="alt"><span>[mysqld]  </span></li>
<li>
<span class="attribute">default-character-set</span><span>=</span><span class="attribute-value">utf8</span><span> </span>
</li>
<li class="alt">
<span class="attribute">default-storage-engine</span><span>=</span><span class="attribute-value">MyISAM</span><span> </span>
</li>
<li><span>在[mysqld]下加入:  </span></li>
<li class="alt">
<span class="attribute">default-collation</span><span>=</span><span class="attribute-value">utf8_bin</span><span> </span>
</li>
<li>
<span class="attribute">init_connect</span><span>=</span><span class="attribute-value">'SET NAMES utf8'</span><span> </span>
</li>
</ol>

Linux 環境で gb2312 エンコーディングを使用する場合、これらのエラーは発生しません。ファイル名が文字化けしてファイルを読み取れない場合は、まずパラメータをオペレーティング システムが認識するエンコードに変換することができます。エンコード変換には、mb_convert_encoding (文字列、新しいエンコード、元のエンコード) を使用できます。 iconv (元のエンコード、新しいエンコード、文字列) を使用して、処理後に保存されたファイル名が文字化けせず、ファイルを正常に読み取れるようにし、中国語名のファイルのアップロードとダウンロードを実現します。

実際、PHP 中国語の文字化けコードには、システムから完全に分離されているため、システムのエンコーディングを考慮する必要がない、より良い解決策があります。ファイル名として文字と数字のみのシーケンスを生成し、データベースに漢字を含む元の名前を保存することができます。この方法では、ダウンロード時に move_uploaded_file() を呼び出すときに問題は発生しません。ファイル名を中国語の文字を含む元の名前に変更します。ダウンロードを実装するコードは以下の通りです

<ol class="dp-xml">
<li class="alt"><span><span>Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: filesize() [function.filesize]: stat failed for ... in ...  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in .. </span></li>
</ol>

$file_typeはファイルの種類、$file_nameは元の名前、$file_pathはサービス上に保存されたファイルのアドレスです。

PHP における中国語の文字化けに対する上記の解決策が、皆様の問題解決に役立つことを願っています。


http://www.bkjia.com/PHPjc/446277.html

tru​​ehttp://www.bkjia.com/PHPjc/446277.html技術記事 1つ。 1 つ目は、PHP Web ページのエンコーディング 1 です。PHP ファイル自体のエンコーディングと Web ページのエンコーディングは一致する必要があります。gb2312 エンコーディングを使用する場合、PHP は header: header (Content-Type) を出力する必要があります。 : テキスト/html...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。