PHPクエリ文字化け問題の解決方法

藏色散人
リリース: 2023-03-07 17:16:02
オリジナル
1947 人が閲覧しました

文字化けした PHP クエリの解決策: まず、PHP ページに「charset=utf-8」を追加し、次にデータベース クエリの前に「mysql_query("set names 'utf8'");」ステートメントを追加します。

PHPクエリ文字化け問題の解決方法

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

推奨事項: "PHP ビデオ チュートリアル"

PHP 接続 MySQL クエリ結果に文字化けした中国語が表示される解決策

最初に仮定します。データベースで使用されるエンコーディングは UTF-8

です。この時点では、まず次のように

コードを PHP ページに追加する必要があります:

ログイン後にコピー

charset の値ここは utf-8 である必要がありますこれは、ファイルを保存するときのエンコーディング タイプと同じです。

次に、次のようにデータベース クエリの前に

コードを追加します。このステートメント行のエンコーディング値も、上記のエンコーディング値と同じである必要があります。

つまり、Web ページに保存されているエンコードの種類、Web ページの charset=utf-8、実行される set names utf8 ステートメントのエンコード方法は一致している必要があります。

I以下に優れた分析を引用します。

MySQL "SET NAMES x" 文字セットの問題分析

最近、投票システムを構築するために BBT からトレーニングを受けました。システムコードは難しくありませんが、主に文字セットとエンコーディングの勉強に時間を費やしました。 MySQL と Apache システムのエンコーディング (文字セット) の問題により、私は頭を悩ませ、非常に苦しみました。インターネット上のこれらの問題に対する解決策は散在しており、一方的であり、そのほとんどは理由を説明せずに解決策を提供しています。そこで、後発者が再び寄り道をしないように、ここ数日で得たことをまとめておきます。この記事は、PHP の作成には少し役立ちます (これを読むと、ほとんどのスペース プロバイダーのサーバーで PHP プログラムを正常に表示する方法がわかります) が、ネットワーク サーバーの確立と設定にさらに役立ちます。

まず、MySQL の文字セットについて話しましょう。 Windows では、my.ini の 2 つのフィールド

mysql_query("set names 'utf8'");
ログイン後にコピー

を変更することで、データベースのデフォルトの文字セットを変更できます。 1 つ目はクライアントのデフォルトの文字セットで、2 つ目はサーバーのデフォルトの文字セットです。両方を utf8 に設定し、MySQL コマンド ライン クライアントで「show variebles like "character_set_%";」と入力すると、次の文字が表示されます:

1.# CLIENT SECTION 2.[mysql] 3.default-character-set=utf8 4.# SERVER SECTION 5.[mysqld] 6.default-character-set=utf8
ログイン後にコピー

utf8 は上記の設定に従います。 設定を変更します。このとき、UTF-8を使用してPHPプログラムでデータベースからデータを読み込むと、「?????」などの文字化けが発生する可能性があります。長い間オンラインで検索した後、解決策は簡単です。データベースに接続した後、データを読み取る前に、まずクエリ「SET NAMES UTF8」、つまり PHP の

character_set_client latin1 character_set_connection latin1 character_set_database utf8 character_set_results latin1 character_set_server utf8 character_set_system utf8
ログイン後にコピー

を実行すると、表示されます。 (データベース情報内の文字が正常である限り) は正常です。なぜこうなった? 「SET NAMES UTF8」というクエリは具体的に何をするのでしょうか?

MySQL コマンド ラインに移動して「SET NAMES UTF8;」と入力し、「show variables like "character_set_%";」を実行すると、変数「character_set_client」、「character_set_connection」、および「character_set_results」が元々は latin1 だった値がすべて utf8 に変更されており、これら 3 つの変数が問題を引き起こしていることがわかりました。マニュアルを参照してください。上記の文は次のとおりです:

1.mysql_query("SET NAMES UTF8");
ログイン後にコピー

これら 3 つの変数の機能を確認してください:

情報入力パス: クライアント→接続→サーバー;

情報出力パス: サーバー→接続→結果。

つまり、各パスでは文字セット エンコーディングを 3 回変更する必要があります。文字化けした出力を例にとると、サーバー内の utf8 データの場合、受信接続は latin1 に変換され、受信結果は latin1 に変換され、utf-8 ページで結果が再度変換されます。 latin1 と utf8 など、2 つの文字セットに互換性がない場合、変換プロセスは元に戻すことができず、破壊的なものになります。したがって、後戻りはできません。

ただし、「SET NAMES UTF8」の効果は一時的なものであり、MySQL は再起動後にデフォルトに戻ることをここで述べておく必要があります。

次に、サーバー上の MySQL の構成について説明します。データ送信のエンコーディングの一貫性を確保するために、データベースの読み取りと書き込みのたびに「SET NAMES UTF8」を追加する必要があるのではないでしょうか?これら 3 つの変数がデフォルトで必要な文字セットになるように MySQL を構成できますか?マニュアルにはそれが記載されておらず、オンラインで答えを見つけることができませんでした。したがって、サーバー構成の観点から、そのコード行を省略する方法はありません。

以上がPHPクエリ文字化け問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!