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