Re: [请益] php 读取特殊字符:

楼主: MOONRAKER (㊣牛鹤鳗毛人)   2017-01-18 11:02:16
※ 引述《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等
 
作者: gpmm (银色)   2017-01-18 11:19:00
推~
作者: andysleep (Maydayisgod)   2017-01-18 12:45:00
谢谢回答 不过想知道:符号为什么没办法顺利判断呢?
作者: MangoTW (不在线上)   2017-01-18 13:07:00
中国字博大精深,全角符号太复杂,老外不懂。自行判断吧
楼主: MOONRAKER (㊣牛鹤鳗毛人)   2017-01-18 13:48:00
怪字符很多 但没碰过你讲的 : 的问题如果你的程式可以提供 会比较容易一般而言常用的strpos(), strchr(), str_replace()等等处理 : 或你提到的 C: 都没有特别的问题找到旧文 2013年写过一样的regex 版本是5.3.16 :|

Links booklink

Contact Us: admin [ a t ] ucptt.com