PHP 中国語の文字化けは、PHP 開発でよく発生する問題です。例: PHP 中国語の文字化けは、Web ページ自体で発生することもあれば、MySQL との対話中に発生することもあり、オペレーティング システムに関連することもあります。では、PHP で中国語の文字化けを解決するにはどうすればよいでしょうか?次に、これら 3 つの状況を詳しく見てみましょう。
#おすすめマニュアル:php完全独学マニュアル
1. 1 つ目は、PHP Web ページのエンコーディングです。
1. PHP ファイル自体のエンコーディングと Web ページのエンコーディングは、a と一致する必要があります。 gb2312 エンコードの場合、PHP はヘッダーを出力する必要があります: header( "Content-Type: text/html; charset=gb2312"), add 静的ページに移動し、すべてのファイルのエンコード形式が ANSI である場合は、メモ帳でファイルを開き、名前を付けて保存してエンコードを ANSI として選択し、ソース ファイルを上書きします。 b. utf-8 エンコーディングを使用したい場合、php はヘッダー ("Content-Type: text/html; charset=utf-8") を出力し、 に設定すると、すべてのファイルのエンコード形式は utf-8 になります。 utf-8 で保存するのは少し面倒かもしれません。通常、utf-8 ファイルは先頭に BOM が付いています。セッションを使用すると問題が発生します。editplus を使用して保存できます。editplus で [ツール] -> [編集] に移動します。パラメータの選択 -> ファイル -> UTF-8 署名で、常に削除を選択し、保存して BOM 情報を削除します。 2. PHP 自体は Unicode ではないため、substr などのすべての関数を mb_substr に変更する必要があります (mbstring 拡張機能をインストールする必要があります)。または、iconv を使用してトランスコードできます。 #########二。 PHP と Mysql の間のデータ対話PHP とデータベースのエンコーディングは一貫している必要があります1. mysql 設定ファイル my.ini または my.cnf を変更します。 mysql
[mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 default-storage-engine=MyISAM 在[mysqld]下加入: default-collation=utf8_bin init_connect='SET NAMES utf8'
2 には utf8 エンコーディングを使用します。データベース操作を実行する必要がある PHP プログラムの前に mysql_query("set 名を追加します。 'Encoding'");、エンコーディングは PHP エンコーディングと一致します。PHP エンコーディングが gb2312 の場合、mysql エンコーディングは gb2312 です。utf-8 の場合、mysql エンコーディングは次のようになります。 utf8 に準拠しているため、データの挿入または取得時に文字化けが発生しません
#3。 PHP はオペレーティング システムに関係しますWindows と Linux ではエンコーディングが異なります。Windows 環境で PHP 関数を呼び出す際、パラメーターが utf-8 エンコーディングであると、次のようなエラーが発生します。として
move_uploaded_file()、filesize()、readfile() など これらの関数はアップロードやダウンロードの処理時によく使用されますが、呼び出すと以下のような現象が発生する場合があります。
上記エラー: Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...
Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...
Warning: filesize() [function.filesize]: stat failed for ... in ...
Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..
実際には、より良い解決策があります。それは、システムから完全に分離することです。これにより、システムのエンコーディングを考慮する必要がなくなります。文字と数字のみのシーケンスをファイル名として生成し、漢字を含む元の名前を保存できます。 データベースではmove_uploaded_file()を呼び出す際には問題なく、ダウンロードする際にはファイル名を元の漢字名に変更するだけで済みます。
ダウンロードを実装するコードは次のとおりです。
header("Pragma: public"); header("Expires: 0"); header("Cache-Component: must-revalidate, post-check=0, pre-check=0"); header("Content-type: $file_type"); header("Content-Length: $file_size"); header("Content-Disposition: attachment; filename=\"$file_name\""); header("Content-Transfer-Encoding: binary"); readfile($file_path);
$file_type はファイルの種類、$file_name は元の名前、$file_path はサービス上に保存されたファイルのアドレスです。 #########四。文字化けが発生する原因をまとめてみましょう
文字化けが発生する原因は大きく分けて2つあり、1つはエンコード(文字セット)によるものです。 設定エラーにより、ブラウザが間違ったエンコードで解析し、画面が乱雑な「天国の本」でいっぱいになります。次に、ファイルが間違ったエンコードで開かれ、保存されます。たとえば、テキスト ファイルは元々 GB2312 でエンコードされていますが、UTF-8 エンコードで開かれ、保存されます。上記の文字化けしたコードの問題を解決するには、まず開発のどの側面にエンコーディングが関係しているかを知る必要があります: 1. ファイル エンコーディング:はページ ファイル (.html、.php など) を指します。 .) 自体。それを保存するために使用されるエンコーディング。
メモ帳と Dreamweaver ファイルのエンコードはページを開いたときに自動的に認識されるので問題ありません。ただし、ZendStudio はエンコーディングを自動的に認識せず、環境設定の構成に基づいて特定のエンコーディングでファイルを開くだけです。 作業中に間違ったエンコードでファイルを開いてしまい、修正後保存した瞬間に文字化けが発生してしまいました(これは私もよく知っています)。 2. ページ宣言エンコーディング: HTML コード HEAD では、; Web ページに使用されているエンコーディングをブラウザに伝えるため。現在、XXX は中国の Web サイト開発で主に GB2312 と UTF-8 を使用しています。 3. データベース接続エンコーディング: は、データベース操作を実行するときにデータベースにデータを送信するためにどのエンコーディングが使用されるかを示します。ここで、MySQL の内部デフォルトなどのデータベース自体のエンコーディングと混同しないように注意してください。
これは latin1 エンコーディングです。つまり、Mysql はデータを latin1 エンコーディングで保存し、他のエンコーディングで Mysql に送信されたデータは latin1 エンコーディングに変換されます。
WEB 開発のどこにコーディングが関係しているかを知ると、コード化けの原因もわかります。上記の 3 つのコーディング設定が矛盾しています。さまざまなコーディングのほとんどが ASCII 互換であるため、英語の記号は表示されません。表示されず、中国語は不運です。 #########五。一般的なエラー状況と解決策:
1. データベースは UTF8 エンコーディングを使用し、ページ宣言エンコーディングは GB2312 です。 , 文字化けの最も一般的な原因です。
現時点では、PHP スクリプト内の直接 SELECT データが文字化けします。クエリを実行する前にこれを使用する必要があります: mysql_query("SET NAMES GBK"); MYSQL 接続エンコーディングを設定し、ページ宣言エンコーディングがここで設定された接続エンコーディングと一致していることを確認します (GBK は GB2312 の拡張です) )。 ページが UTF-8 でエンコードされている場合は、mysql_query("SET NAMES UTF8");一般的に使用される UTF-8 ではなく UTF8 であることに注意してください。
ページで宣言されたエンコーディングがデータベースの内部エンコーディングと一致する場合、接続エンコーディングを設定する必要はありません。
注:
実際には、MYSQL のデータ入出力は上記よりも複雑で、MYSQL 構成ファイルには 2 つのデフォルトのエンコーディングが定義されています。 [client] にあります。 [mysqld] のデフォルト文字セットとデフォルト文字セット クライアント接続と内部データベースにそれぞれデフォルトで使用されるエンコーディングを設定します。
上で指定したエンコーディングは、実際には、MYSQL クライアントがサーバーに接続するときのコマンド ライン パラメータです。 Character_set_client は、デフォルトのエンコーディングを使用する代わりに、受信したクライアント データのエンコーディングを MYSQL サーバーに伝えます。 2. ページ宣言のエンコーディングがファイル自体のエンコーディングと一致していません。エンコーディングが一致しないと、アーティストがページを作成するときにブラウザに表示される内容が文字化けしてしまうため、これはめったに起こりません。多くの場合、公開後に変更されます。 いくつかの軽微なバグは、間違ったエンコーディングでページを開いて保存することによって発生します。 または、CuteFTP などの FTP ソフトウェアを使用してオンラインでファイルを直接変更することもできます。ソフトウェアのエンコード設定が正しくないため、間違ったエンコードにより変換が行われる可能性があります。 コード。 3. バーチャルホストをレンタルしている友人の中には、上記の 3 つのエンコードが正しく設定されているにもかかわらず、依然としてコードが文字化けしている人がいます。たとえば、Web ページは GB2312 です。 エンコードされている場合、IE およびその他のブラウザーは開くと常に UTF-8 として認識します。ページの HEAD には GB2312 と記載されています。ブラウザーのエンコードを手動で GB2312 に変更してください。 次のページは正常に表示されます。 その理由は、サーバー Apache がサーバーのグローバルなデフォルト エンコーディングを設定し、httpd.conf に AddDefaultCharset を追加するためです。 UTF-8 。このとき、サーバーはまずHTTPヘッダーをブラウザーに送信しますが、その優先度はページ内で宣言されているエンコーディングよりも高いため、当然ブラウザーは誤認識してしまいます。 解決策は 2 つあります。仮想マシンの構成ファイルに管理者を追加してください。 AddDefaultCharset GB2312 を使用してグローバル構成をオーバーライドするか、独自のディレクトリの .htaccess で構成します。要約:
一言で言えば、PHP 中国語の文字化けコードを解決する最善かつ最速の方法は、ページで宣言されたエンコーディングがページの内部エンコーディングと一致していることです。ページが要求されたページ番号がデータベースの内部コーディングと一致しない場合 、接続エンコーディングを設定します、mysql_query("SET NAMES XXX "); 1.
php ページの中国語の文字化け関連ビデオの推奨事項: 1.
Dugu Jiijian (4)_PHP ビデオ チュートリアル
以上がPHPの中国語文字化けコードを解決するにはどうすればよいですか? PHPの中国語文字化けの3つの状況を紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。