0

スタックオーバーで何度も検索してきましたが、問題の解決策が見つかりません。ユーザー入力の文字列を mysql データベース内の既存の文字列と比較する必要があります。次のようにデータベースに格納された文字列: xuất khẩuつまり、「xuất khẩu」:)

ユーザーがテキスト ボックスに入力した文字列は「xuất khẩu」です。

しかし、2 つの文字列、mb_encode、htmlentities などを比較しようとすると、文字列が一致したとは言えません。

データベースは utf-8 汎用 ci を使用し、ウェブサイトは utf8 フォントを正しく表示します。

誰でもこれの解決策を教えてもらえますか?

4

3 に答える 3

1

ファイルに以下を追加すると.ini、問題が解決しました。

character-set-server = utf8  
collation-server = utf8_general_ci
于 2012-07-20T05:54:22.900 に答える
1

使用と比較するときは、次のことを確認してください。

html_entity_decode($mysqlValue, ENT_QUOTES, 'UTF-8'); // Compare with the unprocessed user input.

(これにより、DB 値が HTML エンティティから特殊文字にデコードされます。)

または:

htmlentities($userInput, ENT_QUOTES, 'UTF-8'); // Compare with the unprocessed DB value.

(これにより、ユーザーの入力が、特殊文字を含む文字列から HTML エンティティを含む文字列にエンコードされます。)

DB 内のテキストは HTML エンティティであるため、それに基づくソリューションを探します。UTF-8エンコーディングが問題だとは思いませんが、念のため関数に指定しておくとよいでしょう。

于 2012-07-19T07:57:31.967 に答える
0

テーブル フィールドに 'utf-8 general ci' を使用すると、値は適切に保存されますが、文字列を比較するときに問題が発生します。たとえば、文字列 'tèst' と 'test' は、文字セットと照合が utf-8 一般的な ci である値と比較すると、true を返します。

照合/文字セットを utf8_bin に設定してみてください。文字列比較を実行する場合、これははるかに安全です。

ただし、utf8_bin (ci) には大文字と小文字を区別しないバージョンがないため、保存する前に文字を小文字に変換する必要があることに注意してください。

よろしく、

于 2012-07-19T09:20:24.407 に答える