ホームページ >バックエンド開発 >PHPチュートリアル >PHP および MySQL でのページ文字化けの解決策開発_PHP チュートリアル
一般に、文字化けが発生する原因は 2 つあります。まず、エンコード (文字セット) 設定のエラーが原因で、ブラウザが間違ったエンコードで解析し、乱雑な「天国の本」が表示されます。次に、ファイルが間違った形式で読み取られ、エンコーディングが開かれてから保存されます。たとえば、テキスト ファイルは元々 GB2312 でエンコードされていたのに、UTF-8 エンコーディングで開かれて保存されました。上記の文字化けコードの問題を解決するには、まず開発のどの側面にエンコーディングが関係しているかを知る必要があります:
1. ファイル エンコーディング: ページ ファイル (.html、.php など) 自体が保存されるエンコーディングを指します。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコーディングを自動的に認識しません。作業中に誤って間違ったエンコーディングでファイルを開き、変更を行った後にファイルを保存すると、文字化けしてしまいます。の文字が出てきます(しみじみ)。
2. ページ宣言のエンコーディング: HTML コード HEAD で、 を使用して、 Web ページはどのようなエンコーディングを使用しますか? 現在、XXX は中国の Web サイト開発で主に GB2312 と UTF-8 を使用しています。たとえば、MySQL のデフォルトのエンコーディングは latin1 エンコーディングです。これは、Mysql に送信されるデータは latin1 エンコーディングで保存されることを意味します。 latin1 エンコーディングに変換されます。
エンコーディングが関係する場合、コードが文字化けする理由がわかります。さまざまなエンコーディングのほとんどは ASCII と互換性があるため、英語の記号は表示されません。中国語の文字は不運です。一般的なエラーの状況と解決策は次のとおりです。
1. データベースは UTF8 エンコーディングを使用しており、これが文字化けの最も一般的な原因です。 PHP スクリプトで直接 SELECT されたものは文字化けするため、クエリする必要があります。
mysql_query("SET NAMES GBK"); を使用して MYSQL 接続エンコーディングを設定し、ページ宣言エンコーディングが接続エンコーディング セットと一致していることを確認します。ここで (GBK は GB2312 の拡張子です)、ページが UTF-8 でエンコードされている場合は、次を使用できます:
mysql_query("SET NAMES UTF8");ページによって宣言されたエンコーディングはデータベースの内部エンコーディングと一致しているため、接続エンコーディングを設定する必要はありません。
注: 実際には、MYSQL のデータ入力と出力は、上記で説明したものよりも複雑です。 MYSQL 設定ファイル my.ini で定義されており、それぞれ [client] の [default-character-set] と [mysqld] の [default-character-set] で、デフォルトでクライアント接続とデータベースの内部で使用されるエンコーディングを設定します。上記で指定したのは、実際には MYSQL クライアントがサーバーに接続するときのコマンド ライン パラメーターであるcharacter_set_client で、受信したクライアント データのエンコーディングが
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 領域で、 この文は