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