我的軟件使用MySQL數據庫上執行搜索之前執行以下操作:如何防止preg_replace函數在PHP從剝離出一些特殊的字符
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
的問題是,它剝離出來,使用者可以在其他語言中使用的話,像「españa」(西班牙語),因爲「ñ」字符非常常見。
有什麼辦法可以允許preg_replace中的某些特殊字符?
我的軟件使用MySQL數據庫上執行搜索之前執行以下操作:如何防止preg_replace函數在PHP從剝離出一些特殊的字符
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
的問題是,它剝離出來,使用者可以在其他語言中使用的話,像「españa」(西班牙語),因爲「ñ」字符非常常見。
有什麼辦法可以允許preg_replace中的某些特殊字符?
如果你想確保你的關鍵字不包含任何惡意代碼,這不是很長的路要走,你應該閱讀:
How can I prevent sql injection in php
如果你只是想過濾的搜索短語,您可以使用\p{L}
模式將任何字母和\p{N}
與任何數字字符匹配。你也應該使用u
修改如下:/\p{L}+/u
此外,一定要檢查這個問題:
你可以用這一個
$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search);
這將匹配任何不嘗試一個字母數字字符(包括UTF-8字母)以及破折號( - )。
dash包含在'\ p {Pd}'(不確定爲下劃線),'\ w'包含在'[\ pL \ PN ]'因此它變成:'[^ \ pL \ pN \ p {Pd} _]' – Toto
http://www.regular-expressions.info/unicode.html –