2012-06-27 19 views
0

我想建立一個安全的PHP的聯繫表格,允許用戶(希望不是垃圾郵件發送者)發送郵件。PHP的郵件形式的擔保:最可靠的方法來發現新線

我在看的檢測新線的方式,從:字段,通過它,用戶將提交他們的電子郵件地址,並在主題:字段。

我有2個備選方案AOF同樣的功能,以檢測新的生產線,我想你的意見哪一個將是最可靠的(在大多數情況下,這意味着工作):

function containingnewlines1($stringtotest) { 
    if (preg_match("/(%0A|%0D|\\n+|\\r+)/i", $stringtotest) != 0) { 
     echo "Newline found. Suspected injection attempt"; 
     exit; 
    } 
} 

function containingnewlines2($stringtotest) { 
    if (preg_match("/^\R$/", $stringtotest) != 0) { 
     echo "Newline found. Suspected injection attempt"; 
     exit; 
    } 
} 

預先感謝您爲您的意見!

乾杯

回答

1

千差萬別更切中要害的問題是「哪一個更可靠?」。兩種方法的效率都不相關,因爲這兩種方法的執行時間都不會超過幾毫秒。嘗試基於毫秒之內兩者之間的決定是

而且,你這是什麼效率的含義是?你的意思是哪一個更快?哪一個消耗最少的內存?效率是一個不明確的術語,你需要更具體。

如果您絕對必須根據性能/效率要求作出決定,那麼我建議您構建一個基準並自行找出哪一個最適合您的要求,因爲在一天結束時您只能回答這個問題。

+0

非常感謝你,我編輯的問題,因爲我實際上意味着,當你正確的建議,「哪一個是更可靠的」 –

0

我加了自己2個funcs中,做了100000圈的風向標:

function containingnewlines3($stringtotest) { 
    return (strpbrk($stringtotest,"\r\n") !== FALSE); 
} 

function containingnewlines4($stringtotest) { 
    return (strpos($stringtotest,"\n") !== FALSE && strpos($stringtotest,"\r\n") !== FALSE); 
} 

$start = microtime(TRUE); 
for($x=0;$x<100000;$x++) { 
    containingnewlines1($html); // 0.272623 ms 
    containingnewlines2($html); // 0.244299 ms 
    containingnewlines3($html); // 0.377767 ms 
    containingnewlines4($html); // 0.142282 ms 
} 
echo (microtime(TRUE) - $start); 
+0

有趣的,謝謝。但我想知道哪種方式讓我發現新線的最新範圍(取決於操作系統) –

0

其實,我決定用第一個功能,因爲它涉及2個例(%OA和%OD)和它也包括所有由不同的操作系統使用的新行字符變化(\ N,\ n \ r等)。

相關問題