-1
我需要一個正則表達式來使用preg_replace
php函數在搜索表單中輸入用於SQL
在MySQL多語言utf8數據庫中進行全文搜索。我曾考慮使用PHP filter_var
與FILTER_SANITIZE_STRING
,但我結束了preg_replace
:需要正則表達式爲UTF8多語言搜索查詢
我想這些功能:
- 保留空間,只有一個,如果更多的行(串行空格)
- 保持雙報價只有一個,如果更多的行(這樣我就可以在
IN BOOLEAN MODE
使用它phrase
) - 保持
-
&+
&「〜」,只有一個,如果多個連續 - 因爲我希望它是多語言它應該考慮Unicode(utf8)字母
- 我沒有/需要口音考慮。
這是我做了什麼:
$q = addslashes($q);
$q = preg_replace('/[^\w\d\s\s+\p{L}]/u', "", $q);
但產量不會像滿足我的報價("
)和減號(-
)。我該如何寫一個安全的查詢字符串在我的搜索框中使用?
有沒有比使用preg_replace
更好的做法?
如果你這樣做是爲了防止SQL注入,那麼你做錯了。使用[預先準備的語句](http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php/60496#60496)。 [差異](http://www.youtube.com/watch?v=nLinqtCfhKY)。您可以使用'preg_match'來檢測這些無效查詢,並將有趣的消息返回給客戶端NT。 – HamZa
感謝您的評論。沒有注射。我只是使用'SELECT',而不是'INSERT'。但它應該是一個明確的查詢來執行更好的搜索 – Trix
@Arash是的,還有一個簡單的''; DROP TABLE abcd; --'仍然可以工作。不管你使用什麼命令,攻擊者仍然可以像SQL注入一樣刪除東西,通常可以執行完全不同的命令。 – Manishearth