不总是使用正则表达式字符串

时间:2014-05-10 15:42:07

标签: regex perl otrs

我目前正在重写OTRS票务系统中使用的一些自定义perl代码,该代码用于创建类似SQL的查询。是的,可能有更好的方法来逃避输入,但是我们不要进入这个......

$Param{PostMasterSearch}包含test'test@domain.tld之类的电子邮件地址(请注意')。

my $PostMasterSearch = $Param{PostMasterSearch};
$PostMasterSearch =~ s/'//gms;
$Self->{LogObject}->Log(
    Priority => 'error',
    Message => "XXXXX: $PostMasterSearch",
);
$SQLExt .= " $Field LIKE '$PostMasterSearch'";

所以我的期望是,我会找到一条日志消息,说XXXXX: testtest@domain.tld,并且SQL查询的一部分就像Email LIKE 'testtest@domain.tld'

但实际上,我只收到了日志消息 - SQL查询字符串无论出于何种原因Email LIKE 'test'test@domain.tld'

使用代码的最后一行拧紧

$SQLExt .= " $Field LIKE '$PostMasterSearch' X";

没有任何意义 - 但返回字符串Email LIKE 'testtest@domain.tld' X

有关为什么$PostMasterSearch仍然包含应该早已消失的'的任何提示?或者提示如何将$SQLExt' - $PostMasterSearch的更少版本连接起来?

1 个答案:

答案 0 :(得分:0)

好的,现在这是令人尴尬的部分......

事实证明,这个脚本多次包含相同的代码并多次执行...

因此上面发布的代码实际上有效并且不会返回任何错误(就像它应该的那样)。错误消息是由代码的下一次出现引起的,尚未修补。

tl; dr:我可能应该删除该脚本并从头开始重写。