作者MOONRAKER (㊣火星人玩转地球)
看板PHP
标题Re: [请益] php 读取特殊字元:
时间Wed Jan 18 11:02:16 2017
※ 引述《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等
--
从前有个马铃薯王国 有个高贵伟大的国王
有的人尊敬他 有的人畏惧他 但有个人敢看不起他不只是一条龙
嘿呵 快出动 去征服 去摆平 嘿呵 快出征 去征服那条龙
嘿呵 快出动
(宰了它!轰了它!)嘿呵 快出征 去征服那条龙
:■ Potatoes and Dragons (C)Alphanim France 2004-05 :.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.110.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1484708540.A.CF0.html
1F:推 gpmm: 推~ 01/18 11:19
2F:推 andysleep: 谢谢回答 不过想知道:符号为什麽没办法顺利判断呢? 01/18 12:45
3F:→ MangoTW: 中国字博大精深,全形符号太复杂,老外不懂。自行判断吧 01/18 13:07
4F:→ MOONRAKER: 怪字元很多 但没碰过你讲的 : 的问题 01/18 13:48
5F:→ MOONRAKER: 如果你的程式可以提供 会比较容易 01/18 13:49
6F:→ MOONRAKER: 一般而言常用的strpos(), strchr(), str_replace()等等 01/18 14:01
7F:→ MOONRAKER: 处理 : 或你提到的 C: 都没有特别的问题 01/18 14:01
8F:→ MOONRAKER: 找到旧文 2013年写过一样的regex 版本是5.3.16 :| 01/18 14:05