タイトルは「全体で UTF-8 エンコーディングを使用する」のように書き換えられます。
P粉321676640
2023-08-21 21:12:13
<p>
新しいサーバーをセットアップしており、Web アプリケーションで UTF-8 を完全にサポートしたいと考えています。既存のサーバーでこれを試しましたが、常に ISO-8859-1 にフォールバックする必要がありました。 </p>
<p>エンコーディング/文字セットはどこで設定する必要がありますか?これを実現するには、Apache、MySQL、および PHP を構成する必要があることはわかっていますが、従うことができる標準的なチェックリストや、除外できる不一致はありますか? </p>
<p>これは、MySQL 5、PHP 5、および Apache 2 を実行する新しい Linux サーバーです。 </p>
chazomaticus の素晴らしい回答 にもう 1 点追加したいと思います:
また、META タグも忘れないでください (次のように、または その HTML4 または XHTML バージョン ):
リーリーこれは些細なことのように思えるかもしれませんが、IE7 では以前にも問題が発生しました。
すべてを正しく実行しています。データベース、データベース接続、および Content-Type HTTP ヘッダーはすべて UTF-8 に設定されており、他のすべてのブラウザでは問題なく動作しますが、Internet Explorer は依然として「西ヨーロッパ言語」を使用することを要求します。エンコーディング。
ページに META タグが欠落していることが判明しました。追加したら問題は解決しました。
######編集:######W3C には実際には、国際化 (I18N) に特化したかなり大きな セクション があります。この問題に関連する記事が多数あり、HTTP、(X)HTML、CSS の側面について説明しています:
FAQ: (X)HTML ページのエンコーディングを UTF-8
に変更します。- HTMLで文字エンコーディングを宣言する
- チュートリアル: XHTML、HTML、CSS の文字セットとエンコーディング
- HTTP 文字セット パラメータを設定する
-
彼らは、HTTP ヘッダーと HTML メタ タグ (XML として提供される XHTML の場合は XML 宣言) の両方を使用することを推奨しています。
######データストレージ###:###
データベース内のすべてのテーブルとテキスト列に
utf8mb4文字セットを指定します。このようにして、MySQL は、UTF-8 のネイティブ エンコーディングで値を物理的に保存および取得します。- utf8mb4_*
のみを使用できました。冗談だといいのですが。 -
アプリケーション コード (PHP など) では、使用するデータベース アクセス方法に関係なく、接続文字セットを
utf8mb4照合順序が (明示的に文字セットを指定せずに) 指定された場合、MySQL は暗黙的に
utf8mb4
エンコーディングを使用することに注意してください。MySQL の古いバージョン (utf8
######データアクセス###:###
に設定する必要があります。このようにして、MySQL はデータをアプリケーションに渡すときにデータの変換を実行せず、その逆も同様です。
一部のドライバーは、接続文字セットを構成するための独自のメカニズムを提供します。これにより、ドライバー自体の内部状態が更新され、接続で使用するエンコーディングが MySQL に通知されます。通常、これが推奨される方法です。 PHP の場合:-
PDO 抽象化レイヤーを使用している場合は、- DSN
-
######出力###:###
-
(推奨) を設定するか、
header()PHP 5.3.6 以上の
で
charsetを指定できます。 リーリー-
を呼び出すことができます。
リーリー
-
-
mysqli を使用している場合は、
:set_charset()
純粋な mysql に行き詰まっているが、たまたま PHP 5.2.3 以上を実行している場合は、
を呼び出すことができます。mysql_set_charset
ドライバーが接続文字セットを設定するための独自のメカニズムを提供していない場合は、アプリケーションが接続上のデータ エンコーディングをどのように処理するかを MySQL に伝えるクエリを発行する必要がある場合があります。
。セット名「utf8mb4」
utf8mb4/
utf8
に関する上記と同じ考慮事項がここにも当てはまります。UTF-8 は、HTTP ヘッダーに設定する必要があります (例:
Content-Type: text/html; charset=utf-8
)。これを行うには、php.ini でdefault_charset
関数を手動で使用します。 アプリケーションがテキストを他のシステムに転送する場合、文字エンコーディングも知る必要があります。 Web アプリケーションの場合、ブラウザーはデータを送信するエンコーディングを (HTTP 応答ヘッダーまたは
HTML メタデータ経由で) 認識している必要があります。-
json_encode() を使用して出力をエンコードする場合は、2 番目のパラメーターとして
JSON_UNESCAPED_UNICODE
を追加します。######入力###:###- ブラウザはドキュメントで指定された文字セットでデータを送信するため、入力時に特別な処理は必要ありません。
- リクエストのエンコードに疑問がある場合 (改ざんされている可能性があるため)、データを保存または使用する前に、受信した各文字列が有効な 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 のリンクには、知っておくべきことをすべて学ぶための素晴らしいリソースがいくつかあります。