2010-05-28 84 views
1

我对于正则表达式很陌生,而且他们让我很头疼。他们如此吓人!对于我正在进行的电子邮件广告系列,用户将点击电子邮件中的链接并填入一些网址参数,以便更轻松地填写表单。我想阻止任何注入攻击或任何它被称为,但需要允许$ _GET参数是字母数字,有标点符号,并有空格。如果有人有这个一个很好的方法,我会很感激,但现在我有:允许使用字母数字,标点符号和空格

foreach($_GET as $m=>$n) { 
    $get[$m] = preg_replace('(^[a-z0-9 \-\_\.]+)i',' ',$n); 
} 

我希望能够取代这个正则表达式,我相信我不使用的所有字符?!,但我无法让它工作。任何帮助,让这个工作,将不胜感激!

回答

0

你缺少分隔符,你也应该把+了结尾括号]

foreach($_GET as $m=>$n) { 
    $get[$m] = preg_replace("/[^a-zA-Z0-9 \-\_\.]+/"," ",$n); 
} 

或:

foreach($_GET as $m=>$n) { 
    $get[$m] = preg_replace("#[^a-zA-Z0-9 \-\_\.]+#"," ",$n); 
} 
+0

谢谢,我会把分隔符放进去,但我仍然需要弄清楚如何允许字母数字,标点符号和空格。 – bccarlso 2010-05-28 17:02:49

+0

这实际上适用于大多数情况,我只需要手动猜测哪些字符将用于$ _GET数据,并希望我不会错过任何。谢谢! – bccarlso 2010-05-28 18:05:15

0

^角色生活方括号内。所以,你的代码应该是:

$get[$m] = preg_replace('([^a-z0-9 \-\_\.]+)i',' ',$n); 
+0

谢谢你的语法提示,但这仍然没有达到我希望找到的结果。 – bccarlso 2010-05-28 17:02:22

相关问题