多言語システムを検討する場合、システムには考慮が必要な領域がたくさんあります。
システム全体で適切な文字エンコーディングを使用していることを確認する必要があります。ほとんどの場合、文字エンコードの最適な選択は UTF-8 です。(UTF-8 では不十分な場合がいくつかあり、その場合は UTF-16 がありますが、これらのケースはほとんどなく、PHP はいずれにせよ UTF-16 に苦労するため、一般的にはすべてに UTF-8 を使用します。そしてあなたは大丈夫です)。
次の場所で同じ文字エンコーディングを使用していることを確認する必要があります。
- データベース テーブル。
- あなたのウェブサーバー。
- PHP ソース コード。
データベースの扱いは簡単です。すべてのテーブルが文字セットの UTF-8 エンコーディングで作成されていることを確認してください。ジョブ完了。
照合は関連性が低くなります。これにより、並べ替え順序が指定されます。もちろん問題はありませんが、表示されている文字化けしたテキスト表示とは関係ありません。(一部の文字は言語ごとに異なる方法でソートされるため、単一のテーブルで複数の言語をサポートする必要がある場合に、すべての人に適した照合モードを選択することは事実上不可能ですが、これについてはあまり心配する必要はありません。今)。
Apache の設定 (または使用しているサーバー ソフトウェア) に慣れている限り、Web サーバーも比較的単純です。ブラウザーに出力されるすべてのページが UTF-8 エンコードを使用して送信されるようにする必要があります。
最後に、PHP ソース コードを...
まず、実際の PHP コード ファイルを UTF-8 モードで編集していることを確認する必要があります。そうしないと、コードに拡張文字が記述されている場合に問題が発生する可能性があります。
次に、PHP の標準的な文字列処理関数の多くは「マルチバイトを認識しない」ことに注意してください。これは、拡張文字セットでは正しく機能しないことを意味します。たとえばstrlen()
、文字列がメモリ内で占めるバイト数を返します。文字列に 1 バイトを超える文字が含まれている場合、これは正しくありません。幸いなことに、PHP には、これを解決するための一連のマルチバイト関数も用意されています。たとえば、 を使用する代わりに、 をstrlen()
使用しますmb_strlen()
。PHP のマニュアルには、利用可能な正確な関数とそれらをいつ使用するかについての詳細が記載されています。
また、受信した投稿データも正しい文字セットで処理するようにしてください。
うまくいけば、それはあなたを助けるでしょう. ここで重要なのは、システムがすべてのレイヤーで一貫した文字セットを使用していることを確認することです。システム内の 1 つのレイヤーが他のレイヤーとは異なる文字セットを使用している場合、奇妙に見えるエンコーディング エラーの問題が発生する傾向があります。それらがすべて同じであること (できれば UTF-8) であることを確認し、文字化けの問題に対処する必要があります。