新しいサーバーをセットアップしており、Web アプリケーションで UTF-8 を完全にサポートしたいと考えています。過去に既存のサーバーでこれを試してみましたが、常に最終的に ISO-8859-1 にフォールバックする必要があるようでした。
エンコーディング/文字セットは正確にどこで設定する必要がありますか?これを行うには、Apache、MySQL、および PHP を構成する必要があることはわかっています。従うことができる標準的なチェックリストはありますか、または不一致が発生した場合のトラブルシューティングは可能ですか?
これは、MySQL 5、PHP、5、および Apache 2 を実行する新しい Linux サーバーに適用されます。
P粉1352928052023-10-16 09:24:17
chazomaticus の素晴らしい回答 一个> に 1 つ追加したいことがあります:
META タグ (これ、または その HTML4 または XHTML バージョン など):
も忘れないでください。 リーリーこれは些細なことのように思えるかもしれませんが、IE7 では以前にも問題が発生しました。
すべて正しく行っています。データベース、データベース接続、および Content-Type HTTP ヘッダーはすべて UTF-8 に設定されており、他のすべてのブラウザでは正常に動作しますが、Internet Explorer は依然として「西ヨーロッパ言語」を使用することを要求します。エンコーディング。
ページに META タグが欠落していることが判明しました。それを追加すると問題が解決します。
######編集:######W3C には実際には、I18N 専用のかなり大きな セクションがあります。この問題に関連する記事が多数あり、HTTP、(X)HTML、CSS の側面について説明しています:
P粉5369091862023-10-16 00:51:50
######データストレージ###:###
データベース内のすべてのテーブルとテキスト列に
utf8mb4 照合順序が (明示的な文字セットなしで) 指定されている場合、MySQL は暗黙的に utf8mb4
エンコーディングを使用することに注意してください。
MySQL の古いバージョン (5.5.3 未満) では、残念ながら、Unicode 文字のサブセットのみをサポートする
< 5.5.3) 中,不幸的是,您将被迫仅使用
######データアクセス###:###
に設定する必要があります。こうすることで、MySQL がアプリケーションにデータを渡すときに、ネイティブ UTF-8 から変換したり、その逆の変換をしたりすることはありません。
PHP 5.3.6 以降で
mysqli プレーンな mysql を使用したいが、偶然 PHP 5.2.3 以上を実行している場合は、
mysql_set_charset
ドライバーが接続文字セットを設定するための独自のメカニズムを提供していない場合は、アプリケーションが接続上のデータがどのようにエンコードされることを想定しているかを MySQL に伝えるクエリを発行する必要がある場合があります。 代码>
SET NAME 'utf8mb4 '
上で説明したように、同じ考慮事項が utf8mb4/
utf8 にも当てはまります。
UTF-8 は、
Content-Type: text/html;character set = utf-8 のように、HTTP ヘッダーに設定する必要があります。これを行うには、php.ini で
header() 関数を手動で使用します。
アプリケーションが他のシステムにテキストを転送する場合、文字エンコーディングも認識している必要があります。 Web アプリケーションの場合、データを送信するエンコーディングをブラウザーに (HTTP 応答ヘッダーまたは
json_encode() を使用して出力をエンコードする場合は、2 番目のパラメーターとして code>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 のリンクをチェックしてください。 p>