データベースの文字化け データベース PHP の文字化け
図 1 に示すように、PHP は文字化けせずに追加、変更、およびクエリを実行します文字化けしたコードを見るために使用されたソフトウェアは何ですか?
マスター、解決してください
文字化けしたコード
Toad For MySQL
PS: CVS ファイルはどこでも文字化けしており、中国語になっています。 。 。 。
データベースフィールドの接続調整はデフォルトで latin1 です
保存するデータは utf-8 です
必要な文字セットを mysql に宣言していないため、mysql は依然として latin1 を使用してデータを取得します。あなたにとっては utf-8 です
ただし、mysql 管理ツールは必要な文字セットを宣言する必要があるため、latin1 とみなされる utf8 を utf8 に変換すると文字化けが発生します
PHP の追加、変更、クエリは、図 1 に示すように、文字化けしないでください。
図 2 に示すように、MySQL データベース バックエンドで文字化けが表示されます。
原因は何ですか?
図 1:
図 2:
PS:
ページのエンコーディングは UTF-8 を使用します
データベース テーブルのエンコーディングは UTF-8 を使用します
データベース フィールドの接続照合順序はデフォルトの latin1 です
保存されたデータは utf-8 です
必要な文字セットを mysql に宣言していないため、mysql は依然として latin1 を使用してデータを取得します。あなたにとってそれはutf-8です
ただし、mysql管理ツールは必要な文字セットを宣言する必要があるため、latin1とみなされるutf8をutf8に変換すると文字化けが発生します
校正コードは: utf8_general_ci
そうです、latin1 だと utf-8 データを挿入できないはずです。先ほど返信したとき、データをどのように挿入したかについてまだ考えていました
しかし、これは私が行った説明には影響しません、単にリンクが進んでいるというだけです
mysql のデフォルトの文字セットは latin1 であり、一般的に使用する人はほとんどいませんデフォルトの文字セットは、mysql をインストールするときに変更されます (ほとんどの人はどこを変更すればよいのかわかりません)
そのため、mysql を操作するためにデフォルト以外の文字セットが使用されている限り、その前にセット名の文字セット コードを実行する必要があります。操作
utf-8 の場合、名前は utf8 に設定されます
次のコードを utf-8 エンコードで保存して実行します
<?phpheader('Content-type: text/html;charset=utf-8');echo iconv('latin1', 'utf-8', '供应商-西施');
<?phpheader('Content-type: text/html;charset=utf-8');echo iconv('latin1', 'utf-8', iconv('gbk', 'utf-8', '供应商-西施'));
3 つの点が一致していて、文字化けが発生しないことを確認してください:
1、データベースとデータテーブルのエンコーディング
2. ページ内部のエンコーディング
3. ファイルのエンコーディング
そうです、latin1 の場合は、 utf-8 データを挿入できないはずです。先ほど返信したとき、データをどのように挿入したかについてまだ考えていました
しかし、これは私が行った説明には影響しません、単にリンクが進んでいるというだけです
mysql のデフォルトの文字セットは latin1 であり、一般的に使用する人はほとんどいませんデフォルトの文字セットは、mysql のインストール時に変更されます (ほとんどの人はどこを変更すればよいのかわかりません)
そのため、mysql を操作するためにデフォルト以外の文字セットが使用されている限り、その前にセット名の文字セット コードを実行する必要があります。操作
utf-8 の場合、名前は utf8 に設定されます
次のコードを utf-8 エンコードで保存して実行します
<?phpheader('Content-type: text/html;charset=utf-8');echo iconv('latin1', 'utf-8', '供应商-西施');
<?phpheader('Content-type: text/html;charset=utf-8');echo iconv('latin1', 'utf-8', iconv('gbk', 'utf-8', '供应商-西施'));
キーはcharacter_set_server の値です
文字化けしたコードがあるので探してみましょう
キーはcharacter_set_serverの値です
アプリケーションは購入した仮想ホスト上で公開されています Character_set_serverの値を確認するにはどうすればよいですか?
アドバイスありがとうございます
'character_set_server'のような変数を表示します
結果はUTF-8です
これはちょっと無理です、最後の手段
select BINARYsupplier_ from tbl_name where id_=17
echobase64_encode('retrieved data');
結果を投稿してください
これはちょっと無理です、最後の手段
select BINARYsupplier_ from tbl_name where id_=17
echo base64_encode('retrieved data');
結果を投稿します
結果は以下のようになります (結果はデータベース クライアントの結果であり、PHP ページ データは正常に表示されます)。 PS: この投稿のテーマの内容 2 つの写真 -- 》写真 1 は正常に表示される PHP ページ、写真 2 は文字化けが表示されるデータベース クライアント、CV もどこでも文字化けします
プログラムを使って文字化けした内容を抽出し、base64でエンコードした値を投稿してほしい
これは解析に役立ちます
ぜひ投稿してください写真は何の役に立つのですか?
プログラムを使って文字化けしたコンテンツを抽出し、base64 でエンコードされた値を投稿してほしいです
これは分析に役立ちます
以下に示すように、理解しました、ありがとうボス
文字化けした内容:
BINARY使用後の文字化け内容:
echobase64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb
$これはキーです BINARY (バイナリ) モードで読み取られた文字化けしたフィールドの内容
グラフで比較します (方法 #7) あなたのデータはまだ latin1 utf-8 として扱われます
文字セットを変更する前にこれらのデータを挿入しましたか?
echobase64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb
$t は、BINARY (バイナリ) モードで読み取られた文字化けしたフィールドの内容です
グラフで比較してください (方法 #7) あなたのものはまだ UTF です-8 は latin1 として扱われます
文字セットを変更する前にこれらのデータを挿入しましたか?
いいえ。 。文字セットは変更されていません。挿入する前にデータベースのエンコーディングが UTF8 に設定されていないはずです。
QQ に相談してください。
結果を取得してください。このように
echobase64_encode($t); //w6fCscK7w6fCm8Kuw6XCm8Kb
$t は BINARY (バイナリ) モードで読み取られた文字化けしたフィールドの内容です
グラフィック比較 (#7 の方法) によれば、utf-8 はまだ扱われていますlatin1 として
これらのデータはあなたによって変更されました
3Q
前に挿入された文字セットですか?