文字化けした PHP クエリの解決策: まず、PHP ページに「charset=utf-8」を追加し、次にデータベース クエリの前に「mysql_query("set names 'utf8'");」ステートメントを追加します。
このチュートリアルの動作環境: 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 サイトの他の関連記事を参照してください。