php の中国語文字化けの解決策: 1. mysql 設定ファイル「my.ini」または「my.cnf」を変更します; 2. 必要な PHP プログラムの前にステートメント「mysql_query("set」を追加します)データベース操作を実行するには names 'encoding'");"; 3. サーバーのエンコーディング セットを「UTF-8」に設定します。
# PHP における中国語文字化けの原因と解決策の分析
PHP Web ページのエンコード
1. gb2312 エンコーディングを使用する場合、PHP はヘッダー ("Content-type:text/html;charset=gb2312"); を出力し、静的ページを追加し、すべてのファイルのエンコーディング形式は ANSI です。 、メモ帳で開き、ANSI にエンコードされた選択項目として保存し、ソース ファイルを上書きします。
2. utf-8 エンコーディングを使用したい場合、php はヘッダーを出力する必要があります: header("Content-type:text/html;charset=utf-8");、静的ページを追加し、すべてのファイルをエンコードします。形式は utf-8 です。 utf-8 で保存するのは少し面倒かもしれません。通常、utf-8 ファイルは先頭に BOM が付いています。セッションを使用すると問題が発生します。editplus を使用して保存できます。editplus で [ツール] -> [編集] に移動します。パラメータの選択 -> ファイル -> UTF-8 署名で、常に削除を選択し、保存して BOM 情報を削除します。
3.php 自体は Unicode ではないため、substr などのすべての関数を mb_substr に変更するか (mbstring 拡張機能をインストールする必要があります)、または iconv を使用してトランスコードする必要があります。
PHP と Mysql の間のデータ対話
PHP とデータベースのエンコーディングは一貫している必要があります
1. mysql 設定ファイル my.ini または my.cnf、mysql を変更します。 utf -8 Encoding
[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 を使用するのが最善です。データベース操作を実行する必要がある PHP プログラムの前に、mysql_query("set names 'encoding'"); を追加します。エンコーディングは PHP エンコーディングと一致します。 PHP エンコーディングが gb2312 である場合、mysql エンコーディングは gb2312 です。utf-8 の場合、mysql エンコーディングは utf8 であるため、データの挿入または取得時に PHP で中国語の文字化けが発生することはありません。
エンコードについて
1. 文字セット:
コンピュータの最下層に保存されているデータはすべてバイナリデータです。本当に意味のある文字を取得したい場合は、バイナリを使用する必要があります。 データは各文字に対応しており、この対応によりコーディング テーブルが形成されます。
一般的に使用される文字セット:
ISO-8859-1 西ヨーロッパ言語を表すラテン語コード テーブル latin は、1 バイトまたは 8 ビットを使用してデータを表します。
GB2312 簡体字中国語コード表。 6000 ~ 7000 の漢字と記号が含まれています。 2バイトで表現されます。どちらのバイトも 1 で始まり、両方とも負の数です。
GBK は現在最も一般的に使用されている中国語コード テーブルで、20,000 の中国語の文字と記号が含まれています。データを表すには 2 バイトを使用します。
Unicode 国際標準コードは、それがどのようなテキストであっても、2 バイトで格納されます。
UTF-8 は Unicode に基づいています。データは 2 バイトではなく 1 バイトに保存できます。さらに、このコード テーブルはより標準化されており、各バイト ヘッダーにエンコード情報が追加されています。
(Linux はデフォルトで ISO-8859-1 を使用し、win32 はデフォルトで GB2312 を使用します)
2. エンコードとデコード
エンコード: 文字を文字内の対応する文字に変換します。 set Encoding
Decoding: 文字セット内のエンコーディングに対応する文字を検索します
ネットワーク内での中国語の送信プロセス
1. Java を例にとると、Eclipse は以下を使用します。 UTF-8 エンコード セット、Tomcat サーバーはデフォルトで ISO-8859-1 エンコード セットを使用し、ブラウザは一般にデフォルトで GBK エンコード セットを使用します。
文字はプログラムとサーバーの間で送信され、バイトはサーバーとブラウザの間で送信されます。
2. 中国語の送信プロセス:
ブラウザ内の中国語文字 -----> エンコード -----> サーバー -----> デコード --- -->プログラム;
プログラム内の漢字----->サーバー----->デコード----->ブラウザ---- ->エンコード表示
3. 文字化けの原因と解決策:
(1). ブラウザ内の漢字は GBK でエンコードされ、バイト ストリームでサーバーに送信され、サーバーはそれをデコードします。 ISO-8859-1 を取得し、文字の形式でプログラムに送信します。
ISO-8859-1 エンコード セットは中国語の文字をサポートしていないため、デコードされた文字はすべて西ヨーロッパ文字です。これらの文字をプログラムに送信すると文字化けが発生します。
このため、サーバーのエンコード設定を UTF-8:
request.setCharacterEncoding("UTF-8");
ログイン後にコピー
に設定するだけですが、この設定はリクエスト本文の内容にのみ影響するため、このメソッドは POST リクエスト メソッドにのみ使用できます。GET リクエスト メソッドの場合は、デコードしてからエンコードする方法を使用できます:
byte[] buffer = request.getParameter("word").getBytes("ISO-8859-1"); //进行编码
String newStr = new String(buffer,"UTF-8"); //进行解码
ログイン後にコピー
(2). プログラム内の漢字はそのままサーバーに送信されます. サーバーはまず漢字をエンコードしてから送信する必要がありますブラウザに送信されますが、ISO-8859-1 のエンコード セットが中国語の文字をサポートしていないため、対応するエンコードが文字セット内に見つかりません。エンコード後は疑問符になり、ブラウザに送信されて表示されます。 ;
この場合、設定を 2 回行う必要があります:
response.setCharacterEncoding("UTF-8");//将服务器编码集设置为UTF-8
response.setContentType("text/html;charset=UTF-8"); //将浏览器编码集设置为UTF-8
ログイン後にコピー
実際、設定の 2 行目にはすでにサーバーの設定が含まれているため、通常は次のように記述するだけで済みます。コードの 2 番目の文。
関連知識の詳細については、
PHP 中国語 Web サイト をご覧ください。
以上がPHPで漢字が文字化けする問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。