ホームページ > バックエンド開発 > PHPチュートリアル > echoで漢字が文字化けして表示される問題

echoで漢字が文字化けして表示される問題

WBOY
リリース: 2016-06-23 13:55:34
オリジナル
1725 人が閲覧しました

PHP コードは次のとおりです:

echo "<li>ISBN:".$isbn."</br>书名:".$name."</br>作者:".$author."</br>";
ログイン後にコピー

データはデータベースから取得され、$isbn に割り当てられます。
文字化けが表示される

コード追加:
echo "<meta http-equiv='Content-Type'' content='text/html; charset=utf-8'>";
ログイン後にコピー
ログイン後にコピー

変更後:


解決方法は? ?


ディスカッションへの返信 (解決策)

データを取得する前に、次を追加します: mysql_query("set names utf8"); データを取得する前に、次を追加します: mysql_query("set names utf8");

まだ同じです

phpmyadmin ではどのように表示されますか?


データベースはどのようなエンコードを使用しますか?

utf8_general_ci

データを取得します前に追加します: mysql_query("set names utf8");


これはコードです:
//以上连接数据库mysql_set_charset("gbk");$result = mysql_query("SELECT * FROM book_list LIMIT 0 , 30" ); //查询数据库while ($bookInfo = mysql_fetch_array($result)){ //返回查询结果到数组   $isbn = $bookInfo["B_ISBN"]; //将数据从数组取出    $name = $bookInfo["B_name"];    $author = $bookInfo["B_author"];echo "<li>ISBN:".$isbn."</br>书名:".$name."</br>作者:".$author."</li>";  //输出数据}
ログイン後にコピー
ログイン後にコピー

データを取得する前に、次を追加します: mysql_query("set names utf8");


これはコードです:

//以上连接数据库mysql_set_charset("gbk");$result = mysql_query("SELECT * FROM book_list LIMIT 0 , 30" ); //查询数据库while ($bookInfo = mysql_fetch_array($result)){ //返回查询结果到数组   $isbn = $bookInfo["B_ISBN"]; //将数据从数组取出    $name = $bookInfo["B_name"];    $author = $bookInfo["B_author"];echo "<li>ISBN:".$isbn."</br>书名:".$name."</br>作者:".$author."</li>";  //输出数据}
ログイン後にコピー
ログイン後にコピー

コメントアウト
//mysql_set_charset("gbk");

エコーの前に
echo "<meta http-equiv='Content-Type'' content='text/html; charset=utf-8'>";
ログイン後にコピー
ログイン後にコピー

を追加します。
さらに、 mysql_query("set names utf8"); を追加すると、すべての漢字が文字化けします。


直接表示した場合、データベースから読み込んだ内容は正常です。しかし、本のタイトルと著者名が文字化けしています。
ここで、php ファイルが utf8 であることがわかるので、 echo "<meta http-equiv='Content-Type'' content='text/html; charset=utf-8'>"; を追加します。
Book title ,これは作者にとっては普通のことです。

すると、データベースの元の内容が文字化けしてしまいます。確かに、データベース内のコンテンツは utf8 形式ではありません。 iconv を使用して一度変換し、問題が正しいかどうかを確認できます。
// 这一句改成这样echo "<li>ISBN:".$isbn."</br>书名:".iconv('GBK','UTF-8',$name)."</br>作者:".iconv('GBK','UTF-8',$author)."</li>";  //输出数据
ログイン後にコピー

なぜ mysql_set_charset("gbk"); を追加する必要があるのですか?


これは不思議ではないので、データベース内のものが UTF8 ではないと思います

mysql_set_charset("gbk"); mysql_query("set names gbk"); すでに一度変換されているので、再度 UTF8 に変換します。 。 。

gbk環境では、utf-8でエンコードされた書籍タイトルは「涔??」と表示されます

このとき、データベースから読み込んだデータは正常に表示されます

データベースから読み込んだデータがgbkエンコードされていることがわかります。これは、utf-8 言語宣言が発行された後、それを証明するために文字化けした状況が逆転した可能性があります

現在の状況によると、$isbn = iconv('gbk', 'utf-8', $isbn) が必要です。 ; 読み取られるデータは gbk から utf-8 へのエンコーディング変換を行います
と言語宣言のヘッダーが必要です

この現象は次のとおりです。

データベースは latin1 の
フィールドは utf8 です
挿入されたデータは gbk です
データを挿入するときに文字セットが宣言されていなかったため、gbk の内容が latin1 としてフィールドに挿入されました
文字セット読み取り時にも宣言されていないため、フィールド内のデータはそのまま latin1 として読み戻されます
実際、これは、そもそもデータベースが保存されているデータを変更するべきではありません
それ以外の場合は、それが車の場合です。を倉庫に入れて取り出すとバイクになってしまい、めちゃくちゃになります。

データベース内の既存のデータに対しては、これが唯一の方法です。諦めたくない場合は、トランスコーディングを行う必要があります (非常に面倒です)
将来的にデータを挿入および読み取るときは、次の点に注意する必要があります。 set names XXX コマンドを実行します。注意: この XXX は現在のデータの文字セット名です
たとえば、gbk データを挿入するには、mysql_query("set names gbk") を使用します。
データを utf-8 として取得するには、次を使用します。 mysql_query("セット名 utf8");

gbk環境では、utf-8でエンコードされた書籍タイトルは「涔??」と表示されます
このとき、データベースから読み込んだデータは正常に表示されます
データベースから読み込んだデータがgbkエンコードされていることがわかります。これは、utf-8 言語宣言が発行された後、それを証明するために文字化けした状況が逆転した可能性があります

現在の状況によると、$isbn = iconv('gbk', 'utf-8', $isbn) が必要です。 ; 読み取られるデータは gbk から utf-8 へのエンコーディング変換を行います
と言語宣言のヘッダーが必要です

この現象は次のとおりです。
データベースは latin1 の
フィールドは utf8 です
挿入されたデータは gbk です
データを挿入するときに文字セットが宣言されていなかったため、gbk の内容が latin1 としてフィールドに挿入されました
文字セット読み取り時にも宣言されていないため、フィールド内のデータはそのまま latin1 として読み戻されます
実際、これは、そもそもデータベースが保存されているデータを変更するべきではありません
それ以外の場合は、それが車の場合です。を倉庫に入れて取り出すとバイクになってしまい、めちゃくちゃになります。

データベース内の既存のデータに対しては、これが唯一の方法です。諦めたくない場合は、トランスコーディングを行う必要があります (非常に面倒です)
将来的にデータを挿入および読み取るときは、次の点に注意する必要があります。 set names XXX コマンドを実行します。注意: この XXX は現在のデータの文字セット名です
たとえば、gbk データを挿入するには、mysql_query("set names gbk") を使用します。
データを utf-8 として取得するには、次を使用します。 mysql_query("set names utf8");



いいね!合理的かつ十分な根拠がある。非常に良い分析です

なぜ mysql_set_charset("gbk"); を追加する必要があるのですか?

これは不思議ではないので、データベース内のものが UTF8 ではないと思います

mysql_set_charset("gbk");に等しい mysql_query("set names gbk" ); すでに一度変換されています。再度 UTF8 に変換してください。 。 。



私が初めて PHP に触れたとき、データベースに接続する必要がありましたが、Du Niang がコードを見つけるのを手伝ってくれました。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート