照合と文字セットは同じものではありません。照合は文字セットと一致する必要があるため、文字セットが utf-8 の場合は照合も一致する必要があります。ただし、間違った照合順序を選択してもデータが文字化けすることはありません。文字列の比較/並べ替えが正しく機能しないようにするだけです。
とはいえ、PHP で文字セットを設定できる場所はいくつかあります。可能であれば、全体で utf-8 を使用することをお勧めします。文字セットを指定する必要がある場所は次のとおりです。
- データベース。これは、データベース、テーブル、およびフィールド レベルで設定でき、クエリごとのレベルでも設定できます。
- PHP とデータベース間の接続。
- HTTP 出力;
Content-Type
HTTP ヘッダーが utf-8 を指定していることを確認してください。header
PHP と Apache でデフォルト値を設定するか、PHP の関数を使用できます。
- HTTP 入力。通常、フォームはページが提供されたのと同じ文字セットで送信されますが、確実に
accept-charset
プロパティを指定する必要があります。また、URL が utf-8 でエンコードされていることを確認するか、URL (および GET パラメーター) で非 ASCII 文字を使用しないようにしてください。
utf8_encode
/decode 関数の名前は少し変わっています。特に、latin1 (ISO-8859-1) と utf-8 の間で変換します。アプリケーション内のすべてが utf-8 である場合、それらをあまり使用する必要はありません。
utf-8 と PHP に関して、少なくとも 2 つの落とし穴があります。1 つ目は、PHP の組み込み文字列関数は文字列が 1 バイトであることを想定していることです。strlen
多くの操作では、これは問題ではありませんが、他の機能に頼ることができないことを意味します。このページには、制限の概要が記載されています。通常、これは大きな問題ではありませんが、特にサードパーティのライブラリを使用する場合は、これで問題が発生する可能性があることに注意する必要があります。1 つのオプションとして、mb_string 拡張機能を使用することもできます。これには、問題のあるすべての関数を utf-8 対応の代替関数に置き換えるオプションがあります。これはまだ 100% 防弾ソリューションではありませんが、ほとんどの場合に有効です。
もう 1 つの問題は、PHP の一部のインストールでmagic_quotes
設定がまだオンになっていることです。この問題は utf-8 とは関係ありませんが、ヘッド スクラッチを引き起こす可能性があります。あなた自身の正気のために、それをオフにしてください。