0

比較的簡単だと思ったことをやろうとしても、問題が尽きることはありませんでした。

英語と他の言語、いくつかのマルチバイト (つまり、日本語、韓国語など) の混合でユーザー入力テキストを受け入れることができるフォームが必要であり、これは php によって処理され、保存されます (安全に、SQL インジェクションを回避します)。 mysql データベースで。また、データベースからアクセスし、処理し、画面上で使用する必要があります。

ラテン文字には問題なく設定できましたが、ラテン文字とマルチバイト文字を組み合わせて追加すると文字化けします。

宿題をしようとしましたが、今頭を壁にぶつけています。

魔法の引用符はオフです。utf8_encode/decode、htmlentities、addslashes/stripslashes、および (mysql では) テーブルのフィールドに "utf8_general_ci" と "utf8_unicode_ci" の両方を使用してみました。

問題の一部は、私がそれを台無しにする可能性のある場所が非常に多くあるため、どこから問題を解決し始めればよいかわからないことです。

これについてのすべての助けに感謝します。理想的には、誰かが実際に動作する php コードの例を持っているか、適切な mysql テーブル形式を知っている場合、それは素晴らしいことです。

4

6 に答える 6

2

以下は、UTF8 モードで確認する項目のリストです。

  • MySQL テーブルのエンコード。あなたはすでにこれを行っているようです。
  • MySQL 接続エンコーディング。実行すると、MySQL が何を使用しているかSHOW STATUS LIKE 'char%'がわかります。すべての接続の開始時に行うことで、アプリケーションで簡単に設定できる必要がありcharacter_set_clientますcharacter_set_connectionこれは、ほとんどの人がチェックするのを忘れている IME です。character_set_resultsutf8SET NAMES 'utf8'
  • それらを使用する場合は、CLI と端末の設定。bash では、これはLANG=(something).UTF-8.
  • ソース コード (UTF8 定数テキストがない限り、これは通常問題になりません)。
  • ページのエンコーディング。これも正しいようですが、ブラウザーのデバッグ ツールが大いに役立ちます。

このすべてが正しく理解できたら、アプリで必要なのはmysql_real_escape_string().

ああ、 (悲しいこと) 正しくエンコードされた UTf8 テキストを、間違ったエンコーディング タイプの列に、または間違ったエンコーディング タイプの接続から正常に格納することができます。そして、それも「正しく」返ってきます。UTF8 ではないすべてのビットを修正するまで、その時点で壊れます。

于 2011-03-22T04:48:47.880 に答える
0

UTF-8 に代わる実用的な方法はないと思います。エンコードおよび/またはデコードが壊れている場所を追跡する必要があります。まず、mysql コマンド ラインから、またはおそらく phpmyadmin を介して、多言語テキストをデータベースに往復できるかどうかを確認します。そのレベルの問題を追跡して排除します。次に、php への入力をシミュレートし、出力を調べて、もう一度問題を処理することにより、もう 1 つのレベルに移動します。最後に、ブラウザーをミックスに追加します。

于 2011-03-22T03:51:42.950 に答える
0

データベース接続設定を確認してください。また、UTF-8 をサポートする必要があります。

于 2011-03-22T05:04:29.140 に答える
0

偶然にデータをシリアル化していますか? PHP のシリアライズ機能には、英語以外の文字をシリアライズする際に問題があります。

行うことはすべてutf-8 でエンコードする必要があります。

試してみることのできることの 1 つは、データをデータベースに入れるときにjson_encode()を実行し、データを取得するときにjson_decoding()を実行することです。

于 2011-03-22T04:21:10.537 に答える
0

この問題は、php.ini ファイルにデフォルトの文字セットが設定されておらず、(おそらく) mysql テーブルに文字セットが設定されていなかったことが原因でした (PhpMyAdmin の [操作] タブを使用)。

デフォルトの文字セットを「utf-8」に設定すると修正されました。助けてくれてありがとう!!

于 2011-03-22T19:48:16.360 に答える
0

最初に、多言語テキストをデータベースに直接追加できるかどうかを確認する必要があります。可能であれば、アプリケーションでそれを行うことができます

于 2011-03-22T04:07:45.130 に答える