6

HTMLエンティティの二重エンコーディングを防ぐ、またはプログラムで修正するにはどうすればよいですか?

HTML :: Entities perlモジュールのencode()関数を使用して、ユーザー入力のHTMLエンティティをエンコードしています。ここでの問題は、ユーザーがHTMLエンティティを直接入力できるようにし、これらのエンティティが二重にエンコードされることです。

たとえば、ユーザーは次のように入力できます。

Stackoverflow & Perl = Awesome…

これは最終的ににエンコードされます

Stackoverflow & Perl = Awesome…

これはブラウザで次のようにレンダリングされます

Stackoverflow & Perl = Awesome…

これを次のようにレンダリングします

Stackoverflow & Perl = Awesome...

この二重エンコーディングを防ぐ方法はありますか?または、これらのダブルエンコーディングの問題を簡単に修正できるモジュールまたはコードスニペットはありますか?

どんな助けでも大歓迎です!

4

3 に答える 3

7

最初に文字列をデコードできます。

my $input = from_user();

my $encoded = encode_entities( decode_entities $input );
于 2010-04-09T01:48:52.573 に答える
4

これを回避するための非常に簡単な方法があります。

  1. 入力時にすべてのエンティティを削除します (それらを Unicode に変換します)
  2. 出力の段階で再度エンティティにエンコードします。
于 2010-04-09T01:48:46.557 に答える
1

encode()値を保存する前ではなく、表示する値を取得するまで、への呼び出しを保存することを検討してください。検索メカニズムに一貫性がある限り、データベース内の余分なデータは、おそらく心配する価値はありません。

編集

あなたの質問を読み直すと、encode()後で電話しても同じ結果が得られるので、私の答えは問題に完全には対処していないことに気付きました。自分で代替案を知らないので、あまり役に立たないかもしれませんが、既存のシンボルを尊重する、より適切なエンコード方法を見つけることを検討することをお勧めします。

于 2010-04-09T01:38:17.697 に答える