2010-05-28 146 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

相關問題