我想允许A-Z,a-z和日文汉字,平假名和片假名,而不是别的。 到目前为止,我想出了这一点:正则表达式过滤日语
$pattern = '/[^\w\x{3041}-\x{3094}\x{30A1}-\x{30fA}\x{30fC}\x{4E00}-\x{9FFF}_\-]+/u';
preg_replace($pattern, '', $string);
我不知道,如果这种形式的正则表达式是PHP特有的。我接受网址中的字符串,并希望过滤掉引号和其他“危险”字符。关于上述“模式”的奇怪之处在于,有或没有“d”时,数字不匹配。
所以下面做同样的事情:
$pattern = '/[^\d\w\x{3041}-\x{3094}\x{30A1}-\x{30fA}\x{30fC}\x{4E00}-\x{9FFF}_\-]+/u';
我感兴趣的任何改进或更正 - 不是一个正则表达式向导自己。
将危险字符加入黑名单并搜索它们可能会更容易。 – Thilo 2010-11-02 08:44:04
我不知道什么字符可能是危险的。有关于此的任何信息?我在MySQL where子句中使用这个字符串。所以它确实需要100%消毒。 – 2010-11-02 11:23:25
是否可以使用准备(例如[mysqli](http://php.net/manual/en/class.mysqli-stmt.php))?这通常会更安全。 – 2010-11-02 16:22:05