ホームページ >バックエンド開発 >PHPチュートリアル >PHPページ文字化けの具体的な解決方法を詳しく解説_PHPチュートリアル
1. ファイルエンコーディング: ページファイル (.html、.php など) 自体が保存されるエンコーディングを指します。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコーディングを自動的に認識しません。作業中に誤って間違ったエンコーディングでファイルを開き、変更を行った後にファイルを保存すると、文字化けしてしまいます。の文字が出てきます(しみじみ)。
2. ページ宣言のエンコーディング: HTML コード HEAD で、 を使用して、 Web ページはどのようなエンコーディングを使用しますか? 現在、XXX は中国の Web サイト開発で主に GB2312 と UTF-8 を使用しています。たとえば、MySQL のデフォルトのエンコーディングは latin1 エンコーディングです。これは、Mysql に送信されるデータは latin1 エンコーディングで保存されることを意味します。 latin1 エンコーディングに変換されます。
エンコーディングが関係する場合、PHP ページが文字化けする理由がわかります。さまざまなエンコーディングのほとんどは ASCII 互換であるため、英語の記号は一致しません。
1. データベースは UTF8 エンコードを使用しており、ページ宣言のエンコードは GB2312 です。現時点では、これが文字化けの最も一般的な原因です。 PHP スクリプトでデータが直接 SELECT されると PHP ページが文字化けするため、クエリの前に
mysql_query("SET NAMES GBK"); を使用して MYSQL 接続エンコーディングを設定し、ページ宣言エンコーディングが正しいことを確認する必要があります。ページが UTF の場合、ここで設定された接続エンコードと一致します (GBK は GB2312 の拡張です)。
mysql_query("SET NAMES UTF8"); は、一般的なものではなく UTF8 であることに注意してください。ページで宣言されたエンコーディングがデータベースの内部エンコーディングと一致している場合、接続エンコーディングを設定する必要はありません注: 実際には、MYSQL のデータ入出力はさらに複雑です。 MYSQL 設定ファイル my.ini には 2 つのデフォルトのエンコーディングが定義されています。それらは、クライアント接続で使用されるエンコーディングを設定するための [client] の default-character-set と [mysqld] の -set です。上記で指定したエンコーディングは、実際には、MYSQL クライアントがサーバーに接続するときに、デフォルトのエンコーディングを使用する代わりに、どのクライアント データがエンコードされるかを伝えるためのコマンド ライン パラメーターです。ページ宣言のエンコーディングがファイル自体のエンコーディングと一致しない場合、ページの作成時にブラウザに表示される内容が文字化けする可能性が高くなります。リリース後の軽微なバグ、間違ったエンコーディングでページを開いて保存したり、CuteFTP などの FTP ソフトウェアを使用してオンラインでファイルを直接変更したりした場合、ソフトウェアのエンコーディング設定が間違っているために間違ったエンコーディングが変換されてしまいます。
3. バーチャルホストをレンタルしている友人の中には、上記 3 つのエンコーディングが正しく設定されているにもかかわらず、PHP ページが文字化けする人もいます。たとえば、Web ページが GB2312 でエンコードされている場合、ブラウザのエンコードを手動で GB2312 に変更すると、Web ページの HEAD はすでに GB2312 として認識されます。 、ページは正常に表示されます。その理由は、サーバー Apache がサーバーのグローバルなデフォルト エンコーディングを設定し、httpd.conf に AddDefaultCharset UTF-8 を追加するためです。このとき、サーバーは最初に HTTP ヘッダーをブラウザーに送信しますが、その優先順位はページ内で宣言されたエンコーディングよりも高くなります。当然、ブラウザーはそれを誤って認識します。解決策は 2 つあります。管理者は、AddDefaultCharset GB2312 を独自の仮想マシンの構成ファイルに追加してグローバル構成をオーバーライドするか、独自のディレクトリの .htaccess で構成する必要があります。
www.bkjia.com