ホームページ >バックエンド開発 >PHPチュートリアル >IEのmysqlストレージで漢字が消える問題、この世界は奇妙すぎる

IEのmysqlストレージで漢字が消える問題、この世界は奇妙すぎる

WBOY
WBOYオリジナル
2016-06-23 13:26:38893ブラウズ

まず第一に、私のデータベースとページは UTF8 エンコーディングを使用します。 ページのコードは次のとおりです。

header("Content-type:text/html;charset=utf8");
$result=$mysqli->query( "select * from `com_class` where `id`=".$_GET['id']);
if(!($result->fetch_row())){
echo "データが存在しません"; ;
}
$mysqli->query("update `com_class` set `name`='".$_GET["name"]."' where `id`=".$_GET['id']);
echo $_GET['name'];

Google Chrome、Firefoxでは文字化けせずにページが正常に表示され、データベースにも正常にデータが保存されます。

このページは IE9 でも正常に表示され、エラーや文字化けはありません。ただし、データベースはデータを保存せず、表示は空です ($_GET['name'] などの文字化けはありません)。は英語ですが、すべて正常です。データベースも正常に保存できます。

何が起こっているのか教えてください。フロントエンドがブラウザを処理する必要があることは理解できますが、このストレージ データベースはさまざまなブラウザも処理しますか?


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

update `com_class` set `name`='".$_GET["name"]."' where `id`=".$_GET['id']このステートメントはデータベースで正常に実行されましたか?

update `com_class` set `name`='".$_GET["name"]."' where `id`=".$_GET['id']ステートメントはデータベースで正常に実行されましたか?


Google や Firefox で正常にデータベースに保存できれば、実行は成功しているはずです

update `com_class` set `name`='".$_GET["name"]。 "' where `id ステートメント `=.$_GET['id'] はデータベース内で正常に実行されましたか?


Google と Firefox でデータベースに正常に保存できた場合、それは正常に実行されたことを意味します。 .

$mysqli-> エラーを確認してください

update `com_class` set `name`='".$_GET["name"]."' where `id`=".$_GET ['id'] このステートメントは、データベースの実行は成功しましたか? にあります。


Google と Firefox で正常にデータベースに保存できた場合は、実行が成功したことを意味します


$mysqli->error を出力して確認できます

試してみましたが、問題ありません
IEでは英語では正常にデータベースに保存できますが、中国語の文字だけが失われます。SQLステートメントの問題ではなく、データベースとPHPに問題があることがわかります。ページは utf8 エンコーディングを使用しているため、何か問題が発生することはありません。
データベースに接続するためのコードと文字セット設定が表示されませんでした

テストとして、受信データを印刷する必要があります


データベースに接続するためのコードと文字セット設定が表示されませんでした

テストするには、受信データを出力する必要があります。 データ


これらのコードは、ここには書きませんでしたが、データが他のブラウザに正常に保存されたことを意味します。接続と SQL は問題ないはずです。


私は、専門家やこの種の問題に遭遇した人が答えてくれることを願っています。


データベースに接続するためのコードと文字セット設定が見つかりませんでした テストとして、受信データを出力してください


渡したデータは $_GET["id"] と $ だけでした_GET["name" ]


受信データは何ですか? それも「引用」されていますか?
本当に問題を解決したい場合は、できるだけ多くの情報を提供するのが最善です


データベースに接続して文字セットを設定するコードが見つかりませんでした

テストとして、受信したメッセージを出力してくださいデータ

$host= "localhost";
$password=""

$mysqli = 新しい mysqli ("$host","$user"; ,"$password"," $ datebase "); set_charset ("utf8");

これは別のファイルに含まれています。 IEと他のブラウザの違いは、仕様を厳密に遵守していることです
これがTaiyiが独占禁止された理由でもあります

受信データは何ですか? それも「参照」されますか?
本当に問題を解決したい場合は、できるだけ多くの情報を提供することが最善です



データを渡さない 2 つの GET を除き、アドレス バーに直接入力します: http://localhost/update .php?id= 1&name=Zhang San、Zhang San は、Google および Firefox ブラウザで通常どおりデータベースに保存できます。IE9 では、ページにエラー メッセージは表示されません。つまり、元のデータを含め、データベースにデータは保存されません。データ、単なる null 文字

IE と他のブラウザの違いは、規制を厳密に遵守していることです
これが Taiyi が独占禁止された理由でもあります



しかし、データの保存はクライアントのブラウザとは何の関係もありません、これらはすべて MYSQL で実行されます はい

IE なので当然です

理由がわかりました、IE9 のアドレスバーは漢字を認識しないので、データを入力するときに encodeURI を使用するだけです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。