2012-02-21 25 views
1

網站用戶可以在網站上註冊,在註冊期間,他可以提供一個名稱。strip_tags足以從字符串中移除HTML嗎?

我希望這個名字是一個有效的名字,並且沒有任何HTML和其他時髦的字符。 strip_tags足夠嗎?

+1

什麼*白名單*而不是黑名單?如果你要求用戶名符合某些要求,如「沒有時髦的字符」,只允許一定範圍的字符,並檢查,而不是其他的方式。 – deceze 2012-02-21 03:12:11

回答

4

我發現沒有單一功能來防止白癡用戶輸入。最好一起的幾個混合:

$val = trim($val); 
$val = strip_tags($val); 
$val = htmlentities($val, ENT_QUOTES, 'UTF-8'); // convert funky chars to html entities 
$pat = array("\r\n", "\n\r", "\n", "\r"); // remove returns 
$val = str_replace($pat, '', $val); 
$pat = array('/^\s+/', '/\s{2,}/', '/\s+\$/'); // remove multiple whitespaces 
$rep = array('', ' ', ''); 
$val = preg_replace($pat, $rep, $val); 
$val = trim($val); 
$val = mysql_real_escape_string($val); // excellent final step for MySQL entry 
+0

很顯然,把它放在一個函數中......'function sanitize($ val){...}'...然後調用任何你想擦洗的東西 – neokio 2012-02-21 02:59:40

+0

不要忘記在你的INSERT查詢中加入引號,否則所有這些逃避是沒有用的! – Tim 2012-02-21 03:02:33

+1

「MySQL入門的最佳步驟」應該是「關鍵的最後一步」。這實際上是你必須做的唯一一步。 – Hamish 2012-02-21 03:03:27

1

正則表達式可以用更少的代碼合身:

^[A-Z]'?[- a-zA-Z]([a-zA-Z])*$

在這裏,我們有很好的例子:

Regex for names

+2

[N!xau?Toma](http://en.wikipedia.org/wiki/N%C7%83xau)有一個骨頭可以選擇你的正則表達式。 – ceejayoz 2012-02-21 03:12:20

+0

@ceejayoz你是對的! – 2012-02-21 03:15:46