ホームページ  >  記事  >  バックエンド開発  >  PHPにおける中国語文字化けの一般的な解決策のまとめ

PHPにおける中国語文字化けの一般的な解決策のまとめ

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

PHP 中国語の文字化けは、PHP 開発でよくある問題の 1 つです。 PHP の中国語の文字化けは、Web ページ自体で発生することもあれば、MySQL の対話プロセスで発生することもあり、オペレーティング システムに関連していることもあります。ここに概要を示します。

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

1。PHP ファイル自体のエンコーディングと Web ページのエンコーディングは一致する必要があります

a。gb2312 エンコーディングを使用する場合、PHP は header: header を出力する必要があります。 (“Content-Type: text/html; charset= gb2312”)、静的ページに 現在、XXX は中国の Web サイト開発で主に GB2312 と UTF-8 を使用しています。

3. データベース接続エンコーディング: データベース操作を実行するときにデータベースにデータを送信するために使用されるエンコーディングを指します。ここでは、MySQL の内部デフォルトなどのデータベース自体のエンコーディングと混同しないように注意してください。 これは latin1 エンコーディングです。つまり、Mysql はデータを latin1 エンコーディングで保存し、他のエンコーディングで Mysql に送信されたデータは latin1 エンコーディングに変換されます。
WEB 開発でエンコーディングがどこに関係するかがわかったので、文字化けの原因もわかりました。上記の 3 つのエンコーディング設定は一貫性がありません。さまざまなエンコーディングのほとんどは ASCII と互換性があるため、英語の記号は表示されず、中国語の文字は表示されません。不運になるでしょう。

5つ。いくつかの一般的なエラー状況と解決策に対処してください:

1. データベースは UTF8 エンコーディングを使用し、ページ宣言エンコーディングは GB2312 です。 , 文字化けの最も一般的な原因です。このとき、PHP スクリプト内の直接 SELECT データは文字化けするため、クエリを実行する前にそれを使用する必要があります: mysql_query("SET NAMES GBK"); MYSQL 接続エンコーディングを設定し、ページ宣言エンコーディングがここで設定された接続エンコーディングと一致していることを確認します (GBK は GB2312 の拡張です) )。ページが UTF-8 でエンコードされている場合は、 mysql_query("SET NAMES UTF8"); を使用できます。
これは UTF8 であり、一般的に使用される UTF-8 ではないことに注意してください。ページ宣言のエンコーディングがデータベースの内部エンコーディングと一致している場合は、接続エンコーディングを設定する必要はありません。

注: 実際、MYSQL のデータ入出力は、上記で説明したものよりも複雑です。MYSQL 設定ファイル my.ini には、[client] に定義されている 2 つのデフォルトのエンコーディングがあります。 [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 "); XXX が接続エンコーディングを設定するだけで文字化けの問題は確実に解決します。

以上、PHP における中国語文字化けの一般的な解決策を、関連コンテンツも含めてまとめて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。