PHP + MYSQL Web サイト開発では、通常、ブラウザーが中国語の文字を出力するときに文字化けが発生します。この問題の主な原因は、HTML コンテンツのエンコード、PHP ファイルのエンコード、および MySQL データベースのエンコードの不一致です。 UTF-8 を例として、3 つの間の関係を統合する方法を簡単に説明します。
test_charset.php という名前の新しい PHP ファイルを作成し、次のコードをファイルに保存します:
<?php $charset = "utf8"; $con = mysql_connect("localhost", "root", ""); mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary", $con); mysql_select_db("ecshop", $con); $sql = "SELECT user_name, email FROM ecs_admin_user WHERE user_id = 4"; $result = mysql_query($sql, $con); $array = mysql_fetch_array($result, MYSQL_ASSOC); mysql_close($con); $name = $array["user_name"]; $email = $array["email"]; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1>你好, <?php echo $name; ?>!</h1> <h2>你的邮件是:<a href="mailto:<?php echo $email; ?>"><?php echo $email; ?></a></h2> </body> </html>
HTML コンテンツのエンコード
上の 22 行目:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
ここでは、ブラウザが HTML を解析することを指定します。UTF-8 を使用します。エンコーディング。ここで指定しない場合、ブラウザは独自のデフォルトのエンコーディングを使用します。たとえば、IE6 は GB2312、FireFox は UTF-8 など、ブラウザごとにデフォルトのエンコードは異なります。そのため、上記コードの22行目が無い場合、FireFoxでは正常に表示されますが、IE6では文字化けして表示されます。
PHP ファイルのエンコーディング
PHP ファイル自体も一貫したエンコーディングである必要があります。 PHP ファイルのエンコーディングを確認するにはどうすればよいですか? Windows では、メモ帳を使用して簡単に処理できます。以下に示すように、メモ帳で PHP ファイルを開き、[ファイル] メニューから [名前を付けて保存...] を選択します。
現在開いているダイアログ ボックスの下部に [エンコーディング] オプションがあります。 「ファイルがエンコードされました」を参照してください。別のエンコードに変更する場合は、ドロップダウン リスト ボックスから選択し、「保存」ボタンをクリックします。
MySQL データベースのエンコーディング
データベース接続が成功したら、上記のコードの 7 行目など、エンコーディングの設定命令をできるだけ早く実行する必要があります。ここで特に注意が必要なのは、UTF-8 が通常の書き方ですが、MySQL では真ん中に横線を入れずに UTF8 と省略して表記されることです。上記の 7 行目は、接続エンコーディングを utf-8 ではなく utf8 ($charset="utf8") に設定します。参考までに、ECShop 設定接続エンコーディングの完全な実装をここに添付します。ファイルは include/cls_mysql.php です。
りー