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

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

DDD
DDDオリジナル
2023-06-06 11:13:041514ブラウズ

php がデータベースから文字化けした中国語を読み取る場合の解決策: 1. 「mysql_query」関数を使用して MYSQL 接続エンコーディングを設定し、ページ宣言エンコーディングがここで設定した接続エンコーディングと一致していることを確認します。 FTP ソフトウェアを使用してオンライン ファイルを直接変更する; 3. 「AddDefaultCharset GB2312」を仮想マシンの構成ファイルに追加してグローバル構成をオーバーライドするか、ディレクトリの .htaccess で構成します。

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

このチュートリアルの動作環境: Windows 10 システム、PHP バージョン 8.1.3、Dell g3 コンピューター。

php がデータベースから中国語の文字化けを読み取る理由:

一般に、文字化けが発生する原因は 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“);

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

注: 事実 MYSQL のデータ入出力は、 MYSQL 設定ファイル my.ini には 2 つのデフォルトのエンコーディングが定義されており、[client] のデフォルト文字セットと [mysqld] のデフォルト文字セットです。デフォルトでは、クライアント接続とデータベース内部によって行われます。上で指定したエンコーディングは、実際には、MYSQL クライアントがサーバーに接続するときのコマンド ライン パラメーターcharacter_set_client であり、これにより、受信したクライアント データのエンコーディングが 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 サイトの他の関連記事を参照してください。

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