使用POSIX字符类
如何匹配[:cntrl:]但不包括[:space:]?
$message = ereg_replace("[[:cntrl:]]", "", $message);
答案 0 :(得分:5)
ereg_ *(POSIX)函数现已被弃用了很长时间。你不应该继续使用这些方法。
根据POSIX Bracket Expressions [:cntrl:]
解析为ASCII范围[\x00-\x1F\x7F]
(或unicode \p{Cc}
)和[:space:]
解析为[ \t\r\n\v\f]
。使用asciitable.com解析这些字符,您将获得[\x20\x09-\x0D]
的排除列表。 “做数学”你留下了[\x00-\x08\x0E-\x1F\x7F]
。并留下以下内容,PHP 5.3和向上兼容,清理:
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F]+/', '', $message);
请注意,VT
(垂直标签)和FF
(表单Feed,新页面)也会保留。根据您的具体情况,您可能也想删除它们:
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F\x0A\x0C]+/', '', $message);
答案 1 :(得分:0)
[[:cntrl:]]
基本上是[\x00-\x1f\x7F]
而[[:space:]]
相当于[ \t\r\n\v\f]
(ref),所以长手法就是使用[\x00-\x08\x0E-\x1F\7F]
(空格为0x20且超出cntrl范围,\t\r\n\v\f
为\ x09到\ x0D)