一般に、文字化けが発生する原因は 2 つあります。まず、エンコード (文字セット) 設定のエラーが原因で、ブラウザが間違ったエンコードで解析し、乱雑な「天国の本」が表示されます。次に、ファイルが間違った形式で読み取られ、エンコーディングが開かれてから保存されます。たとえば、テキスト ファイルは元々 GB2312 でエンコードされていたのに、UTF-8 エンコーディングで開かれて保存されました。上記の文字化けしたコードの問題を解決するには、まず、開発のどの側面にエンコーディングが関係しているかを知る必要があります。
1. ファイル エンコーディング: ページ ファイル (.html、.php など) のエンコーディングを指します。それ自体は保存されます。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコーディングを自動的に認識しません。作業中に誤って間違ったエンコーディングでファイルを開き、変更を行った後にファイルを保存すると、文字化けしてしまいます。の文字が出てきます(しみじみ)。
2. ページ宣言のエンコーディング: HTML コード HEAD では、 を使用して伝えることができます。ブラウザ サーバー Web ページにはどのようなエンコーディングが使用されますか? 現在、XXX は中国の Web サイト開発で主に GB2312 と UTF-8 を使用しています。
3. データベース接続エンコーディング: データベース操作を実行するときに使用されるエンコーディングを指します。データベースからデータを送信するときは、データベース自体のエンコーディングと混同しないように注意する必要があります。たとえば、MySQL 内のデフォルトのエンコーディングは latin1 エンコーディングです。つまり、Mysql は Mysql に送信されるデータを latin1 エンコーディングで保存します。他のエンコーディングは latin1 に変換されます。
WEB 開発にエンコーディングが関係していることを知ると、文字化けの原因もわかります。これは、さまざまなエンコーディングのほとんどが矛盾しているためです。 ASCII と互換性があり、英語の記号が表示されない場合は、中国語は役に立ちません。一般的なエラーの状況と解決策をいくつか示します。
1. データベースは UTF8 エンコーディングを使用し、ページ宣言のエンコーディングは GB2312 です。これは、文字化けの最も一般的な原因です。PHP スクリプトでデータを直接選択すると、データが文字化けします。
mysql_query("SET NAMES GBK"); を使用して設定する必要があります。 MYSQL 接続エンコードを確認し、ページ宣言エンコードがここの設定と一致していることを確認します。接続エンコードが一致しています (GBK は GB2312 の拡張です)。ページが UTF-8 エンコードされている場合は、
mysql_query(") を使用できます。 SET NAMES UTF8"); これは、一般的に使用される UTF-8 ではなく UTF8 であることに注意してください。宣言されたエンコーディングがデータベースの内部エンコーディングと一致している場合は、接続エンコーディングを設定する必要はありません。
注:実際、MYSQL のデータ入力と出力は、上で説明したものよりも複雑です。MYSQL 設定ファイル my.ini には、それぞれ [client] のデフォルト文字セットとデフォルトのエンコーディングが 2 つ定義されています。 -character-set in [mysqld] は、デフォルトのクライアント接続とデータベースで内部的に使用されるエンコーディングを設定します。上で指定したエンコーディングは、実際には MYSQL クライアント接続であり、サーバー時に MYSQL に指示するために使用されます。
2. ページ宣言のエンコーディングがファイル自体のエンコーディングと一致しない この状況は非常にまれに発生します。エンコードが一貫していない場合、ページの作成時にブラウザに表示されるコードは文字化けしています。多くの場合、公開後に小さなバグを修正し、間違ったエンコードでページを開いて保存したことが原因です。または、CuteFTP などの一部の FTP ソフトウェアを使用してオンラインでファイルを直接変更すると、ソフトウェアのエンコード設定が間違っているため、間違ったエンコードが変換されます。
3. バーチャルホストをレンタルしている友人の中には、上記 3 つのエンコードが正しく設定されているにもかかわらず、文字化けが発生する人もいます。たとえば、Web ページが GB2312 でエンコードされている場合、ブラウザのエンコードを手動で GB2312 に変更すると、Web ページの HEAD はすでに GB2312 として認識されます。 、ページは正常に表示されます。その理由は、サーバー Apache がサーバーのグローバルなデフォルト エンコーディングを設定し、httpd.conf に AddDefaultCharset UTF-8 を追加するためです。このとき、サーバーは最初に HTTP ヘッダーをブラウザーに送信しますが、その優先順位はページ内で宣言されたエンコーディングよりも高くなります。当然、ブラウザーはそれを誤って認識します。解決策は 2 つあります。管理者は、AddDefaultCharset GB2312 を独自の仮想マシンの構成ファイルに追加してグローバル構成をオーバーライドするか、独自のディレクトリの .htaccess で構成する必要があります。
2006.4.4 以降の注: 情報提供してくれた JunChen に感謝します: HTML ページの HEAD 領域で、 この文は