2

UTF-8 準拠のデータベースに対して PHP を使用する。入力方法はこんな感じ。

  1. テキストエリアへのユーザータイプ入力
  2. javascript escape() でエンコードされたテキストエリア
  3. HTTP ポスト経由で渡される
  4. PHP rawurldecode() でデコード
  5. デフォルト設定で HTMLPurifier を通過
  6. MySQL 用にエスケープされ、データベースに保存されます

そして、それは通常の方法で出てきて、ページの読み込み時に unescape() を実行します。これは、たとえば、Word 文書から直接コピーして貼り付けて、スマート クォートを表示できるようにするためです。

しかし、HTMLPurifier は、%D6 にエスケープする Ö のような単純な % 式にエスケープする非 UTF-8 特殊文字を破壊しているようですが、スマートクォートは %u2024 などにエスケープし、その方法でデータベースに入ります。特殊文字とその直後の文字の両方を取り出します。

このプロセスで何かを変更する必要があります。おそらく、私は複数のことを変更する必要があります。

特殊文字が上書きされないようにするにはどうすればよいですか?

4

1 に答える 1

5
  1. javascript escape() でエンコードされたテキストエリア

escapeASCII以外では安全ではありません。使用するescapeURIComponent

  1. HTTP ポスト経由で渡される

私はあなたが使用すると仮定しますXmlHttpRequestか?そうでない場合は、フォームを含むページが utf-8 として提供されていることを確認してください。

  1. PHP rawurldecode() でデコード

を介して値にアクセスする場合$_POST、デコードは既に行われているため、デコードしないでください。そんなことをしたら、データが台無しになります。

  1. MySQL 用にエスケープされ、データベースに保存されます

magic quotesオンになっていないことを確認してください。データベースがテーブルを utf-8 として格納していることを確認してください (エンコーディング照合は両方とも utf-8 である必要があります)。php と MySql の間の接続が utf-8 であることを確認します ( set names utf8PDO を使用しない場合は を使用します)。

最後に、文字列を再度出力するときに、ページが utf-8 として提供されることを確認してください。

于 2009-05-14T17:53:26.370 に答える