我正在尝试使用以下Perl音译清理表单输入:
sub ValidateInput {
my $input = shift;
$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\\{}[]?! -//cd;
return $input;
}
问题是这个音译是删除用户可能进入textarea字段的嵌入式换行符,我希望将其保留为字符串的一部分。有关如何更新此内容以阻止其删除嵌入式换行符的任何想法?在此先感谢您的帮助!
答案 0 :(得分:3)
我不确定你在做什么,但我怀疑你是想在ASCII表中保留空格和波浪号之间的所有字符,以及一些空格字符。我认为您的大部分内容都会缩小到一个范围\x20-\x7e
:
$string =~ tr/\x0a\x0d\x20-\x7e//cd;
如果你想淘汰像"
这样的角色(虽然我怀疑你真的想要它,因为你允许单引号),只需调整你的范围:
$string =~ tr/\x0a\x0d\x20-\xa7\xa9-\x7e//cd;
答案 1 :(得分:1)
这有点像拜占庭式的做法!如果你添加\ 012,它应该保留换行符。
$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\{}[]?! \012-//cd;
答案 2 :(得分:1)
application/x-www-form-urlencoded
:换行符表示为“CR LF”对(即%0D%0A
)。...
multipart/form-data
:与所有MIME传输一样,“CR LF”(即%0D%0A
)用于分隔数据行。
我不知道你在数据库里有什么。现在您知道它看到的脚本了什么。
您正在使用CGI.pm
,对吧?
答案 3 :(得分:-1)
感谢帮帮!最终,我决定处理数据库中的所有数据,以删除导致问题的字符,以便通过我们的更新表单提交的任何文本(并且不会被用户更改)与数据库中的文本相匹配。根据您的建议,我还在验证正则表达式中添加了一些其他允许的字符。