0

私は問題に困惑しています。私が試したトリックのほとんどはうまくいかないようです。問題の概要は次のとおりです。

  1. テーブルを作成し、照合順序を utf8_unicode_ci に設定します。列についても同様です。

  2. フォームが配置されているページには、UTF-8 の文字エンコーディングがあります (<meta>タグ内)。フォームは UTF-8 の文字セットを受け入れるように設定されています ( <form action="execute.php" method="POST" accept-charset="utf-8">)

  3. Execute.php は を使用してフォーム入力をサニタイズしhtmlspecialchars(@trim($str), ENT_QUOTES, "UTF-8");、実行しmysql_real_escape_string($str);ます。データベース接続を UTF-8 でエンコードする必要があることを宣言します ( mysql_set_charset('utf-8');)。値を db に挿入します。データベースの挿入を停止してクエリをエコーすると、通常の出力が得られます。

  4. さあ、楽しみが始まります。MySQL の行は、例えば ß が ß に変わるなど、奇妙な文字を表示します。

  5. データベースのデータを取得して、UTF-8 エンコーディングのページに表示すると、文字もごちゃごちゃして見えます (ß)。ただし、ページのエンコーディングを Western ISO に変更すると、文字は問題なく表示されます - ß.

フォームがデータをデータベースに送信するときに問題があるのではないかと疑っています...しかし、正確にどこが間違っていたのかを特定することはできません。

4

3 に答える 3

3

いくつかのこと

  1. htmlspecialchars投稿されたデータを衛生的に処理しないでください。入力を検証しますが、有効な場合はそのまま保存します。
  2. 必要に応じて出力をサニタイズしますhtmlspecialchars
  3. UTF8 文字列ではバイナリセーフ関数のみを使用してください。最新の PHP でこれに遭遇する可能性は低いですが、可能です。
  4. 非推奨の mysql ライブラリの使用を停止し、mysqli (簡単) または PDO に切り替えます。
  5. SET NAMES utf8mysqli でデータベース接続を初期化した後。
  6. PHP ファイル (または使用されているもの) が UTF8 として保存されていることを確認してください。
  7. 応答ヘッダーを UTF8 に設定しますheader('Content-type: text/html; charset=utf-8');。出力バッファリングを使用している場合は、コードのどこからでもこれを行うことができます。
  8. ページに追加<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />します<head>
于 2012-10-02T17:41:48.983 に答える
0

htmlspecialchars() なしで試しましたか?

于 2012-10-02T17:42:52.520 に答える
0

データベース テーブルの文字セットと列も UTF-8 に設定する必要があります。照合は、データがどのようにエンコードされるかではなく、どのようにソート/比較されるかのみを扱います。

于 2012-10-02T18:05:22.077 に答える