2013-09-26 44 views
0

我的軟件使用MySQL數據庫上執行搜索之前執行以下操作:如何防止preg_replace函數在PHP從剝離出一些特殊的字符

$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search); 

的問題是,它剝離出來,使用者可以在其他語言中使用的話,像「españa」(西班牙語),因爲「ñ」字符非常常見。

有什麼辦法可以允許preg_replace中的某些特殊字符?

+0

http://www.regular-expressions.info/unicode.html –

回答

0

如果你想確保你的關鍵字不包含任何惡意代碼,這不是很長的路要走,你應該閱讀:

How can I prevent sql injection in php

如果你只是想過濾的搜索短語,您可以使用\p{L}模式將任何字母和\p{N}與任何數字字符匹配。你也應該使用u修改如下:/\p{L}+/u

此外,一定要檢查這個問題:

Regular expression \p{L} and \p{N}

0

你可以用這一個

$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search); 

這將匹配任何不嘗試一個字母數字字符(包括UTF-8字母)以及破折號( - )。

+0

dash包含在'\ p {Pd}'(不確定爲下劃線),'\ w'包含在'[\ pL \ PN ]'因此它變成:'[^ \ pL \ pN \ p {Pd} _]' – Toto