Perl在电子邮件中的大块文本中插入虚假字符
|
我正在网上进行维护,以在Perl中完成(我不了解Perl)。表格中的详细信息会通过电子邮件发送给他人处理。测试人员在电子邮件中返回此错误:
大块文字插入了虚假字符。大约在1961年触发
每个文本字段或文本区域中的字符。感叹号和空格插入
大约1961年,然后间隔八个字符,然后大约每2048个字符重复一次。
因此,我尝试重复此错误,这是它返回的内容(字符1960-1970):
一种!德夫吉
我不知道会导致这种情况发生的原因。我认为“修复”的唯一方法是这样做:
if (length($someInput) gt 1500){
$someInput=substr($someInput, 0, 1500);
}
有谁知道是什么原因导致这种情况在Perl中发生,以及如何解决?
编辑
这是我贯穿每个领域的功能。然后将其放入电子邮件html中。
#sanitises and returns the given input
sub sanitiseInput {
my ($input) = @_;
$input = trim(param($input));
$input = HTML::Entities::decode($input);
$input =~ s/<script[^>]*?>.*?<\\/script>//gi; # strip out javascript
$input =~ s/<style[^>]*?>.*?<\\/style>//gi; # strip out styles
$input =~ s/<![\\s\\S]*?--[ \\t\\n\\r]*>//gi; # strip out multi-line comments
$input =~ s/&/&/gi; # & to &
$input =~ s/</</gi; # < to <
$input =~ s/>/>/gi; # > to >
$input =~ s/\"/"/gi; # \" to "
$input =~ s/\'/'/gi; # \' to '
$input =~ s/\\r\\n/<br>/gi; # return and newline to <br>
$input =~ s/\\r/<br>/gi; # return to <br>
$input =~ s/\\n/<br>/gi; # newline to <br>
return $input; #return the new value
}
编辑这是通过电子邮件发送html的功能
sub mailer {
my ($from_eddress, $to_eddress, $subject, $mail_content, $fail_eddress)=@_;
open(MAIL, \"|/usr/sbin/sendmail -f $from_eddress $to_eddress\") or print \"Cannot fork to mail - $!\\n\";
print MAIL \"From: $from_eddress\\n\";
print MAIL \"To: $to_eddress \\n\";
print MAIL \"Subject: $subject\\n\";
if ($fail_eddress != \'\') { print MAIL \"fail-to: $fail_eddress\\n\"; }
print MAIL \"Content-type: text/html\\n\\n\";
print MAIL \"\\n\";
print MAIL \"<html><head><style>body, p, th, td {font-size: 0.75em; font-family: Arial, Helvetica, sans-serif;} a {font-size: 1em; font-family: Arial, Helvetica, sans-serif;} .large{font-size: 1.2em;} .small{font-size: .8em;} </style></head><body>\";
print MAIL \"$mail_content\";
print MAIL \"</body></html>\";
close (MAIL);
}
没有找到相关结果
已邀请:
3 个回复
疏腔傻小雹
)。别。也许将其添加为最后一个替代:
(事实上,您到第一个前5个字符的距离比下一个前5个字符的距离小,这让我怀疑sendmail将前HTML比特算作同一行的一部分-RFC 822格式要求使用6个换行符)。 另外,如果用户可能输入的3kb rant没有换行符,则您可能希望在空白处换行,而不是在原始换行符上换行。 编辑:刚注意到我的正则表达式带走了
-脑子放屁。现在好点了?
席陋临拈
泉秘胁
另外,我列出的最后一个正则表达式可能有问题
[\\ s \\ S]中的\\ S可以匹配多行注释的末尾,因为\\ S可以匹配[->]字符。