看板 PHP 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/PHP/M.1484708540.A.CF0.html
gpmm: 推~ 01/18 11:19
andysleep: 謝謝回答 不過想知道:符號為什麼沒辦法順利判斷呢? 01/18 12:45
MangoTW: 中國字博大精深,全形符號太複雜,老外不懂。自行判斷吧 01/18 13:07
MOONRAKER: 怪字元很多 但沒碰過你講的 : 的問題 01/18 13:48
MOONRAKER: 如果你的程式可以提供 會比較容易 01/18 13:49
MOONRAKER: 一般而言常用的strpos(), strchr(), str_replace()等等 01/18 14:01
MOONRAKER: 處理 : 或你提到的 C: 都沒有特別的問題 01/18 14:01
MOONRAKER: 找到舊文 2013年寫過一樣的regex 版本是5.3.16 :| 01/18 14:05