常に UTF-8 を使用してください
P粉964682904
2023-08-27 16:00:18
<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 に変更する
######データストレージ###:###
データベース内のすべてのテーブルとテキスト列に
utf8mb4文字セットを指定します。これにより、MySQL は、UTF-8 でネイティブにエンコードされた値を物理的に保存および取得します。MySQL は暗黙的に使用することに注意してください。- utf8mb4
-
######データアクセス###:###
utf8mb4 に設定する必要があります。このようにすると、MySQL はそのコードからの変換を行いません。アプリケーションにデータを渡すとき、またはその逆の場合はネイティブ UTF-8 です。
照合順序が指定されている場合のエンコード (明示的な文字セットなし)。
MySQL の古いバージョン (utf8 を使用する必要があります。 .
アプリケーション コード (PHP など) では、どのような DB アクセス方法を使用する場合でも、接続文字セットを
一部のドライバーは、接続文字セットを構成するための独自のメカニズムを提供します。これにより、ドライバー自体の内部状態が更新され、接続で使用するエンコーディングが MySQL に通知されます。通常、これが推奨されるアプローチです。 PHP の場合:
PHP 5.3.6 以降で
DSNPDO
抽象化レイヤーを使用している場合は、を指定できます。 # リーリー
mysqli を使用している場合は、
set_charset()
: を呼び出すことができます。 リーリーmysql を使っていて、たまたま PHP 5.2.3 以上を実行している場合は、mysql_set_charset
.## を呼び出すことができます。
#ドライバーが接続文字セットを設定するための独自のメカニズムを提供していない場合は、アプリケーションが接続上のデータがどのようにエンコードされることを想定しているかを MySQL に伝えるクエリを発行する必要がある場合があります。セット名「utf8mb4」.
utf8mb4######出力###:###
UTF-8 は、Content-Type: text/html; charset=utf-8
のように HTTP ヘッダーに設定する必要があります。これは、
アプリケーションが他のシステムにテキストを転送する場合、文字エンコーディングも認識している必要があります。 Web アプリケーションの場合、データを送信するエンコーディングをブラウザーに (HTTP 応答ヘッダーまたは(推奨)、または
header()関数を手動で使用します。
json_encode()
を使用して出力をエンコードする場合、2 番目のパラメーターとしてJSON_UNESCAPED_UNICODE- を追加します。
######入力###:###- ブラウザはドキュメントで指定された文字セットのデータを送信するため、入力を特別に操作する必要はありません。
- リクエストのエンコードに疑問がある場合 (改ざんされる可能性がある場合に備えて)、受信したすべての文字列を保存したりどこかで使用したりする前に、その文字列が有効な UTF-8 であることを確認してください。 #mb_check_encoding()
その他のコードのメモ
はトリックを実行しますが、これを忠実に使用する必要があります。悪意のあるクライアントは希望するエンコーディングでデータを送信できるため、これを回避する方法はありません。 PHP にこれを確実に実行してもらいます。
:
明らかに、提供するすべてのファイル (PHP、HTML、JavaScript など) は有効な UTF-8 を使用してエンコードする必要があります。-
UTF-8 文字列を処理するたびに、安全に処理できることを確認する必要があります。残念ながら、これが難しい部分です。おそらく、PHP の - を広範囲に使用することをお勧めします。
- PHP の組み込み文字列操作は、デフォルトでは
自分が何をしているのかを知るには (台無しにしないでください)、UTF-8 とそれが可能な限り最低レベルでどのように動作するかを本当に理解する必要があります。知っておくべきことすべてに関する優れたリソースについては、- utf8.com
mbstring
拡張子.
not です。 通常の PHP 文字列操作 (連結など) で安全に実行できることがいくつかあります。ただし、ほとんどの場合、同等の mbstring 関数を使用する必要があります。
のリンクをチェックしてください。 p>