ホームページ >バックエンド開発 >PHPチュートリアル >MySQLとPHP_PHPの文字化けの具体的な原因と解決策を紹介するチュートリアル
MySQL と PHP で文字化けが発生する理由:
◆ MySQL データベースのデフォルトのエンコーディングが PHP Web ページと一致しない場合、MySQL の文字化けが発生する可能性があります。 MySQL のテーブル エンコーディングの選択を求められたときに、このエンコーディングが Web ページのエンコーディングと一致しない場合、MySQL のコードが文字化けする可能性があります
◆ MySQL がテーブルを作成するときに、フィールドを追加するときにエンコーディングを選択できます。このエンコーディングは Web ページのエンコーディングと一致しません。不一致により、MySQL のコードが文字化けする可能性もあります
◆ ユーザーが送信したページのエンコーディングが、データを表示しているページのエンコーディングと一致しない場合、PHP ページでエラーが発生します。文字化けする;
◆ ユーザーがデータを入力したページが big5 コードの場合、ユーザーが入力したページが表示されますが、それは gb2312 であり、100% 文字化けの原因となります
◆ 文字セットPHP ページの文が正しくありません。
◆ PHP 接続の MySQL データベース ステートメントで指定されたエンコーディングが正しくありません。
注:MySQL のバージョンが一致しないと、MySQL と PHP の間でコードが文字化けするのではないかと多くの人が疑っていますが、このガイドを読んだ後はそうは思わなくなると思います。
通常、一部の Web サイトで表示されるテキストには、複数のエンコーディングが使用されている場合があります。たとえば、繁体字中国語の文字は、big5 エンコーディング、utf-8 エンコーディング、または gb エンコーディングである可能性があります。つまり、簡体字中国語でエンコードされた繁体字中国語の文字もあれば、繁体字中国語でエンコードされた簡体字中国語の文字もあるということを理解する必要があります。
簡素化されたエンコードを使用して Web ページを作成している場合、エンコードは GB2312 に設定されています。香港および台湾からの訪問者が繁体字中国語の情報を送信すると、コードが文字化けする可能性があります。解決策:
Web サイトのエンコードを utf-8 に設定します。これは世界中のすべてのキャラクターと互換性があります。
ウェブサイトが長期間運営されており、古いデータが多く、簡体字中国語の設定を変更できない場合は、ページのエンコードを GBK に設定することをお勧めします。 GBK と GB2312 の違いは次のとおりです。 GBK は GB2312 文字よりも多くの文字を表示できます。簡略化されたコードで繁体字を表示したい場合は、GBK のみを使用できます。
MySQL と PHP を使用するときに文字化けが発生する原因を明確に理解できたので、解決策は難しくありません。
MySQL と PHP によって生成される文字化けコードの解決策:MySQL をインストールするためのコードを変更できない場合、多くの友人は Web サイトを構築するために仮想ホストを購入しており、MySQL のインストール コードを変更する権利を持っていません。以下の手順が正しい限り、文字化けの問題は解決できるため、この手順は省略できます。
データベースのエンコードを変更します。データベースのエンコードが間違っている場合は、PHPmyadmin で次のコマンドを実行できます:
<ol class="dp-xml"><li class="alt"><span><span>ALTER DATABASE 'test'<br> DEFAULT CHARACTER SET <br>utf8 COLLATE utf8_bin </span></span></li></ol>
上記のコマンドは、テスト データベースのエンコードを utf8 に設定します。
テーブルのエンコーディングを変更します:
<ol class="dp-xml"><li class="alt"><span><span>ALTER TABLE 'category' <br>DEFAULT CHARACTER SET <br>utf8 COLLATE utf8_bin </span></span></li></ol>
上記のコマンドは、テーブル カテゴリのエンコーディングを utf8 に変更することです。
フィールド エンコーディングを変更します:
<ol class="dp-xml"><li class="alt"><span><span>ALTER TABLE 'test'<br> CHANGE 'dd' 'dd' VARCHAR( 45 ) <br>CHARACTER SET utf8 COLLATE utf8_bin NOT NULL </span></span></li></ol>
上記のコマンドは、テスト テーブルの dd のフィールド エンコーディングを utf8 に変更します。
この状況が簡単に解決できる場合は、ページを確認してソース ファイルの文字セットを変更するだけです。
この場合、ページの文字セットを変更することもできます。
データベースに接続するステートメント内。
<ol class="dp-xml"> <li class="alt"><span><span>mysql_connect('localhost','user','password'); </span></span></li> <li class="alt"><span><span>mysql_select_db('my_db'); </span></span></li> <li class="alt"><span><span>mysql_query("set names utf8;"); <br>//select 数据库之后加多这一句 </span></span></li> </ol>
PHP ページで文字化けが発生しないようにするには、PHP ページの最初の文から始めてください
<ol class="dp-xml"><li class="alt"><span><span>header("content-type:text/html; </span><span class="attribute">charset</span><span>=</span><span class="attribute-value">utf</span><span>-8"); <br>//强行指定页面的编码,以避免乱码 </span></span></li></ol>
注: 上記の方法に従って変更した後、新しく挿入したデータによって文字化けが発生しないことを確認することしかできません。たとえば、MySQL と PHP で文字化けが発生する場合、ユーザーが送信したデータは BIG5 ですが、GB2312 の Web ページ上で正しく表示されるように上記の方法を使用したい場合、このようなことは不可能です。テキストコード変換の問題は別のプログラムを書くことでしか解決できません。
http://www.bkjia.com/PHPjc/446268.html