2010-02-09 34 views
1

我有一個表單域,其中包含HTML和文本的混合。 我希望用戶能夠使用基本的HTML和標點符號。如何處理混合了HTML和標點符號的用戶輸入?

目前我使用mysql_real_escape_string的preg_replace消毒的數據,並將其插入到數據庫中。我的理解是,preg_replace是去除不在允許字符的白名單中的任何字符的最佳方法,並且mysql_real_escape_string可以防止SQL注入。

//How I collect and sanitise the data... 
$var=mysql_real_escape_string(
preg_replace("/[^A-Za-z0-9-?!$#@()\"'.:;\\@,_ =\/<> ]/",'',$_POST['var']) 
); 

但是,使用散列字符時它會一直中斷。

我的問題是:

1)是否有更有效的方式來做到這一點?

2)如果這是最好的方法,我做錯了什麼?

,我需要允許的字符是:所有字母數字字符和:

? ! @#$%&() - 。 ,:; '「<>/+ =

謝謝!

回答

2

由於許多非字母數字字符的正則表達式有特殊的含義,你應該逃避所有的人。所以

preg_replace("/[^A-Za-z0-9-?!$#@()\"'.:;\\@,_ =\/<> ]/",'',$_POST['var']) 

變(有,可能不需要進行轉了幾下,但它不會傷害)

preg_replace("/[^A-Za-z0-9-\?\!\$\#\@\(\)\"\'\.\:\;\\@\,\_ \=\/\<\> ]/",'',$_POST['var']) 
+0

謝謝!如果它不可靠,我猶豫要使用strip_tags。 – Matt 2010-02-09 16:43:40

4

爲什麼不直接使用用strip_tags(),它限制了你所需要的標籤?

strip_tags ($str,"<br>") 

然後你可以做其他的 」衛生「 是是不是很侵入。

+2

應當指出的是strip_tags的,而漂亮的時候它的工作原理,是不可靠的。 http://ca.php.net/strip_tags – dnagirl 2010-02-09 15:18:12