質問
次のPerl文字変換を使用してフォーム入力をクリーンアップしようとしています:
sub ValidateInput {
my $input = shift;
$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\\{}[]?! -//cd;
return $input;
}
問題は、この音訳が、ユーザーが文字列の一部として保持したいtextareaフィールドに入力する可能性のある埋め込み改行文字を削除することです。これを更新して、埋め込まれた改行文字を削除しないようにする方法についてのアイデアはありますか?よろしくお願いします!
解決 4
助けてくれてありがとう!最終的に、データベース内のすべてのデータを処理して、問題の原因となった文字を削除し、更新フォームを介して送信された(ユーザーによって変更されていない)テキストがデータベース内のテキストと一致するようにしました。あなたの提案に従って、私はいくつかの追加の許可された文字を検証正規表現に追加しました。
他のヒント
あなたが何をしているのか分かりませんが、ASCIIテーブルのスペースとチルダの間のすべての文字と、いくつかの空白文字を保持しようとしていると思われます。あなたのリストのほとんどは、単一の範囲 \ x20- \ x7e
に凝縮していると思います:
$string =~ tr/\x0a\x0d\x20-\x7e//cd;
"
のような文字をノックアウトしたい場合(一重引用符を許可しているので本当に欲しいと思うが)、範囲を調整するだけです:
$string =~ tr/\x0a\x0d\x20-\xa7\xa9-\x7e//cd;
それはビザンチン様式のちょっとしたやり方です! \ 012を追加すると、改行が保持されます。
$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\{}[]?! \012-//cd;
application / x-www-form-urlencoded
:改行は「CR LF」として表されます。ペア(つまり、%0D%0A
)。...
multipart / form-data
:すべてのMIME送信と同様に、" CR LF" (つまり、%0D%0A
)は、データの行を区切るために使用されます。
データベースに何があるかわかりません。これで、スクリプトの表示内容がわかりました。
CGI.pm
を使用していますか?