ホームページ > バックエンド開発 > PHPの問題 > PHPがデータベースから文字化けを読み取った場合の対処方法

PHPがデータベースから文字化けを読み取った場合の対処方法

藏色散人
リリース: 2023-03-07 20:50:02
オリジナル
2452 人が閲覧しました

php がデータベース コードを読み取る際の文字化けの解決策: 1. ファイルのエンコーディングを変更する; 2. HTML コードの HEAD でエンコーディングを宣言する; 3. データベース接続のエンコーディングを変更する; 4. ページ宣言のエンコーディングとデータベース接続を設定するエンコーディングを一貫性のあるものにします。

PHPがデータベースから文字化けを読み取った場合の対処方法

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 5.6。この方法は、すべてのブランドのコンピューターに適しています。

推奨: 「PHP ビデオ チュートリアル

php データベースが文字化けを読み取り、その理由を説明します

一般的に、文字化けとはこれには 2 つの理由があります。1 つ目は、エンコード (文字セット) 設定が間違っているため、ブラウザが間違ったエンコードで解析し、画面いっぱいに乱雑な「天国の本」が表示されることです。2 つ目は、ファイルがたとえば、テキスト ファイルは元々 GB2312 でエンコードされていましたが、UTF-8 エンコードで開かれて保存されました。上記の文字化けコードの問題を解決するには、まず開発のどの側面にエンコーディングが関係しているかを知る必要があります。

1. ファイル エンコーディング: ページ ファイル (.html、.php など) のエンコーディングを指します。それ自体は保存されます。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコードを自動的に認識しません。環境設定の設定に従って特定のエンコードでファイルを開くだけです。作業中に誤って間違ったエンコードでファイルを開くと、保存した瞬間に文字化けが表示されます。変更を加えた後です。

2. ページ宣言のエンコーディング: HTML コードの HEAD では、「meta http-equiv="Content-Type" content="text/html; charset="XXX" /」を使用できます (この文は必ず「タイトル」の前に記述されるエンコーディング

3. データベース接続エンコーディング: データベース操作を実行するときにデータベースにデータを送信するために使用されるエンコーディングを指します。データベース自体のエンコーディングと混同されます。たとえば、MySQL の内部デフォルトは laTIn1 エンコーディングです。つまり、MySQL はデータを laTIn1 エンコーディングで保存し、他のエンコーディングで Mysql に送信されたデータは latin1 エンコーディングに変換されます。

# WEB 開発でエンコーディングがどこに関係するのかを知っていれば、コードが文字化けする理由がわかるでしょう: 上記 3 つのエンコーディング設定が矛盾しているため、各種エンコーディングのほとんどは ASCII と互換性があるため、英語の記号は表示されず、中国語の記号は表示されません

1. データベースは UTF8 エンコーディングを使用しており、ページ宣言エンコーディングは GB2312 です。これは文字化けの最も一般的な原因です。現時点では、これが文字化けの最も一般的な原因です。 , PHP スクリプト内の直接 SELECT データは文字化けします。クエリを実行する前にこれを使用する必要があります:

 mysql_query(”SET NAMES GBK“);
  或mysql_query(”SET NAMES GB2312“);
ログイン後にコピー

MYSQL 接続エンコーディングを設定するには、ページ宣言エンコーディングがここで設定した接続エンコーディングと一致していることを確認してください ( GBK は GB2312 の拡張機能です)。ページが UTF-8 エンコードされている場合は、次を使用できます:

mysql_query(”SET NAMES UTF8“);
ログイン後にコピー

これは、一般的に使用される UTF-8 ではなく UTF8 であることに注意してください。ページで宣言されたエンコードがデータベースの内部エンコーディングと一致するため、接続エンコーディングを設定する必要はありません。

注: 実際には、MYSQL のデータ入出力は上記よりも複雑です。一部、MYSQL 設定ファイル.ini は 2 つのデフォルトのエンコーディングを定義します。つまり、[client] のdefault-character-set と [mysqld] のdefault-character-set で、デフォルトのクライアント接続とデータベースをそれぞれ設定します。内部的に使用されるエンコーディングです。上で指定したエンコーディングは、実際にはコマンドラインパラメータcharacter_set_clientは、MYSQLクライアントがサーバーに接続するときに、デフォルトのエンコーディングを使用する代わりに、受信したクライアントデータのエンコーディングをMYSQLサーバーに伝えます。

2. ページ宣言のエンコーディングがエンコーディングと一致しません。ファイル自体のエンコーディングが一貫していない場合、アーティストがページ作成時にブラウザに表示するのは文字化けしたコードであるため、これはめったに起こりません。多くの場合、いくつかの小さなバグはリリース後に修正されるため、リリース時に不適切なエンコーディングが原因で発生します。ページを開いて保存します。または、CuteFTP などの FTP ソフトウェアを使用してオンラインでファイルを直接変更すると、ソフトウェアのエンコード設定が正しくないため、間違ったエンコードが変換されます。

3. 仮想ホストをレンタルしている友人の中には、上記の 3 つのエンコードが正しく設定されているにもかかわらず、依然としてコードが文字化けしている人がいます。たとえば、Web ページが GB2312 でエンコードされている場合、IE などのブラウザで開いたときに常に UTF-8 として認識されます。Web ページの HEAD にはすでに GB2312 と記載されています。ブラウザのエンコードを手動で GB2312 に変更した後、 、ページは正常に表示されます。その理由は、サーバー Apache がサーバーのグローバルなデフォルト エンコーディングを設定し、httpd.conf に AddDefaultCharset UTF-8 を追加するためです。このとき、サーバーはまずHTTPヘッダーをブラウザーに送信しますが、その優先度はページ内で宣言されているエンコーディングよりも高いため、当然ブラウザーは誤認識してしまいます。解決策は 2 つあり、管理者は独自の仮想マシンの構成ファイルに AddDefaultCharset GB2312 を追加してグローバル構成をオーバーライドするか、独自のディレクトリの .htaccess で構成する必要があります。

プログラミング関連の知識について詳しくは、

プログラミング ビデオをご覧ください。 !

以上がPHPがデータベースから文字化けを読み取った場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート