P粉1388714852023-07-25 16:40:26
Chazomaticus の優れた回答に追加したいと思います:
META タグ (このような、または HTML4 または XHTML バージョン) も忘れないでください:
リーリーこれは些細なことのように思えるかもしれませんが、IE7 では以前にも問題が発生しました。
すべてを正しく実行しています。データベース、データベース接続、および Content-Type HTTP ヘッダーはすべて UTF-8 に設定されており、他のすべてのブラウザーでは正常に動作しますが、Internet Explorer は依然として「西ヨーロッパ」を使用することを要求します。 "コーディング。
ページに META タグが欠落していることが判明しました。それを追加した後、問題は解決されました。
W3C には実際、国際化 (I18N) 問題に特化したかなりのセクションがあります。この問題に関連し、HTTP、(X)HTML、CSS をカバーする記事が多数あります:
FAQ: (X)HTML ページのエンコードを UTF-8 に変更する
P粉3814637802023-07-25 09:11:32
######データストレージ###:###
データベース内のすべてのテーブルとテキスト列に utf8mb4 文字セットを指定します。このようにして、MySQL は、UTF-8 のネイティブ エンコーディングで値を物理的に保存および取得します。 utf8mb4_* 照合順序が (明示的な文字セットなしで) 指定されている場合、MySQL は暗黙的に utf8mb4 エンコーディングを使用することに注意してください。
MySQL の古いバージョン (<5.5.3) では、Unicode 文字のサブセットのみをサポートする単純な utf8 を使用する必要がありました。これは残念ですが、それは事実です。
一部のドライバーは、接続文字セットを構成するための独自のメカニズムを提供します。これにより、ドライバー自体の内部状態が更新され、接続で使用するエンコーディングが MySQL に通知されます。通常、これが推奨されるアプローチです。 PHP の場合:
PHP 5.3.6 以上の PDO 抽象化レイヤーを使用している場合は、DSN で文字セットを指定できます:
リーリーmysqli を使用している場合は、set_charset():
を呼び出すことができます。 リーリー通常の mysql 関数しか使用できないが、PHP 5.2.3 以上を実行している場合は、mysql_set_charset メソッドを呼び出すことができます。
UTF-8 は、HTTP ヘッダーに設定する必要があります (例: Content-Type: text/html; charset=utf-8)。これを行うには、php.ini でdefault_charset を設定するか (推奨)、header() 関数を手動で使用します。
出力エンコーディングに json_encode() を使用する場合は、2 番目のパラメーターとして JSON_UNESCAPED_UNICODE を追加します。
ブラウザはドキュメントで指定された文字セットでデータを送信するため、入力時に特別な処理は必要ありません。
リクエストのエンコード (改ざんされている可能性がある) に疑問がある場合は、受信した各文字列が有効な UTF-8 であることを確認してから、それを保存したり、どこかに使用したりすることができます。 PHP の mb_check_encoding() はこれを行うことができますが、常に使用する必要があります。悪意のあるクライアントは任意のエンコーディングでデータを送信できるため、これを回避する方法は実際にはありませんが、PHP にこれを確実に実行させるためのトリックはまだ見つかりません。明らかに、提供するすべてのファイル (PHP、HTML、JavaScript など) は有効な UTF-8 でエンコードされる必要があります。
PHP の組み込み文字列操作は、デフォルトでは UTF-8 をサポートしません。安全に使用できる通常の PHP 文字列操作 (連結など) がいくつかありますが、ほとんどの操作では同等の mbstring 関数を使用する必要があります。
自分が何をしているのか (つまり、失敗していないのか) を知るには、UTF-8 とそれが最下位レベルでどのように機能するかを本当に理解する必要があります。 utf8.com のリンクをチェックして、知っておくべきことをすべて学ぶための優れたリソースを提供します。