1

言語固有の翻訳を含むデータベースと通信する多言語のWebサイトがあります。

たとえば、テーブルの性別には10行あり、各行は言語を示します。

+---------+-----------+-----+
| English | French    | etc |
| Male    | Masculine | ... |
+---------+-----------+-----+

一部の言語(中国語、ギリシャ語、トルコ語、スペイン語、ロシア語など)にはlatin1以外の文字があり、サイトのデータベースからデータを読み取ると?、文字化けの記号が表示されます(文字化け)

では、どうすればこれを修正できますか?

dbで特定の照合を使用し、特定のメタ文字セットタグを追加する必要があることはわかっていますが、それでも機能しません。

 cp1256 | Windows Arabic          | cp1256_general_ci (it's not giving me the correct arabic solution.)
 gbk    | GBK Simplified Chinese  | gbk_chinese_ci    (it's not giving me the correct chinese solution.)
4

4 に答える 4

1

変換には列ではなく特定の表を使用する必要があります。この場合、すべてのテーブルの文字セットを指定できます。

現時点では、次のものがあります。

+---------+-----------+-----+
| | 英語 | フランス語 | 等 |
| | 男性 | 男性 | ... |
+---------+-----------+-----+

あなたが持っている必要があります:

性別_en
+----------+--------------+
| | id_gender | 値 |
+----------+--------------+
| | 1 | 男性 |
| | 2 | 女性 | 女性 |
+----------+--------------+

性別
+----------+--------------+
| | id_gender | 値 |
+----------+--------------+
| | 1 | ホンブレ |
| | 2 | ムジャー |
+----------+--------------+

性別_fr
.....

等々

于 2012-09-26T15:11:02.157 に答える
1

多言語システムを検討する場合、システムには考慮が必要な領域がたくさんあります。

システム全体で適切な文字エンコーディングを使用していることを確認する必要があります。ほとんどの場合、文字エンコードの最適な選択は 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) であることを確認し、文字化けの問題に対処する必要があります。

于 2012-09-26T14:13:30.460 に答える
1

照合は並べ替えの目的でのみ使用され、charset はストレージに使用されます。どうやらlatin1、興味深い文字セットを使用しているようです。多くの人が文字セットを使用することを提案するutf-8ため、すべてのデータをその文字セットに変換する必要があります。個人的には、バイナリ データ ( binaryvs. charvarbinaryvs. varcharblobvs. text) を使用します。これは、バイナリ ソートが異なるため、正確なソート (照合) が必要な場合にのみ問題になります。

于 2012-09-26T13:03:42.597 に答える
0

最も簡単な方法は、Web サイト全体に UTF-8 を使用することです。UTF-8 は、他のエンコーディングのすべての既知の文字で動作します。mysql を使用している場合は、クエリを作成する前に、接続オブジェクトに UTF-8 を使用するように指示することが重要です。PHP と MySQL で UTF-8 を使用する方法についての短い記事を書きました。

照合は文字セットと同じではなく、2 つの値を比較する方法 (ソートなど) を定義するだけです。

于 2012-09-26T15:22:36.067 に答える