※ 引述《andysleep (Maydayisgod)》之铭言:
: 由于input字段是姓名所以中英可以接受
: 但是要怎么过滤其他符号呢?
: 有没有其他方法
: 谢谢大家
刚好不久以前才有人问过类似的问题
只要你的php版本不太旧(应该是5.4就可以),可以用preg_match()
用\w配合u选项就可以match正常的中英文姓名字符组合
php > function filter($s) {
preg_match('/[\w ]+/u', $s, $m);
print_r($m);
}
php > filter('郑余镇C:\windows\etc\');
Array
(
[0] => 郑余镇C
)
php > filter('王筱蝉; drop table students');
Array
(
[0] => 王筱蝉
)
php > filter('james bond');
Array
(
[0] => james bond
)
\w表示一般的“文字”字符,包括大小写英文字母和底线
加上尾巴的u,表示unicode, 就会包括中文字(应该也包括其他语言的字母)
[\w ]中间空一格,那就是空白的意思,整包表示文字字符或空白
不加空白上面的james bond就无法全部match到,只会得到james
[\w ]+表示上面的组合出现一次或以上
例如郑余镇那个例子,前面四个字符合乎规则
到:的时候不符合规则,所以中断,剩下"郑余镇C"
在php端过滤人名字符,这就很够用了
但是这只是防攻击手段的其中一环
其他还包括前端javascript过滤、数据库使用escape和prepared statement等