P粉1847475362023-08-22 15:24:08
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粉0329772072023-08-22 11:53:19
######データストレージ###:###
データベース内のすべてのテーブルとテキスト列に
utf8mb4 照合順序が (明示的な文字セットなしで) 指定されている場合、MySQL は暗黙的に utf8mb4
エンコーディングを使用することに注意してください。
MySQL の古いバージョン (<5.5.3) では、Unicode 文字のサブセットのみをサポートする
######データアクセス###:###
に設定する必要があります。このように、MySQL はアプリケーションにデータを渡すとき、またはその逆のときにネイティブ UTF-8 からの変換を行いません。
PHP 5.3.6 以降で
で
charsetmysqli を使用している場合は、set_charset()
純粋な mysql に行き詰まっているが、たまたま PHP 5.2.3 以上を実行している場合は、mysql_set_charset
ドライバーが接続文字セットを設定するための独自のメカニズムを提供していない場合は、クエリを発行して、接続上のデータにどのようなエンコーディングが必要かを MySQL アプリケーションに指示する必要がある場合があります。名前「utf8mb4」 を設定してください。
utf8 に関する上記と同じ考慮事項がここにも適用されます。
######出力###:###
)。これを行うには、php.ini で default_charset
(推奨) を設定するか、
アプリケーションがテキストを他のシステムに転送する場合は、文字エンコーディングも伝える必要があります。 Web アプリケーションの場合、データが送信されるエンコードをブラウザーに (HTTP 応答ヘッダーまたは HTML メタデータ 経由で) 伝える必要があります。
を使用して出力をエンコードする場合、2 番目のパラメーターとして
JSON_UNESCAPED_UNICODE を追加します。
######入力###:###mb_check_encoding()
はこの問題を解決できますが、厳密に使用する必要があります。悪意のあるクライアントは任意のエンコーディングでデータを送信できるため、この問題を回避する方法は実際にはありません。PHP にこれを確実に実行させるためのトリックはまだ見つかりません。 その他のコードのメモ:
明らかに、提供するすべてのファイル (PHP、HTML、JavaScript など) は有効な UTF-8 でエンコードされる必要があります。
UTF-8 文字列を処理するときは、必ず安全に行う必要があります。これは非常に難しい部分です。 PHP の mbstring
拡張機能を広範囲に使用する必要がある場合があります。
PHP の組み込み文字列操作は、デフォルトでは UTF-8 で安全ではありません。 連結などの通常の PHP 文字列操作を使用して一部の操作を安全に実行できますが、ほとんどの操作では同等の mbstring
関数を使用する必要があります。
自分が何をしているのかを知るには (つまり、失敗しないように)、UTF-8 とそれが最下位レベルでどのように機能するかを本当に理解する必要があります。 utf8.com のリンクをチェックして、知っておくべきことをすべて学びましょう。