使用POSIX字符类
如何匹配[:cntrl:]但不包括[:space:]?
$message = ereg_replace("[[:cntrl:]]", "", $message);
Run Code Online (Sandbox Code Playgroud)
ereg_*(POSIX)函数已被弃用了很长时间.你不应该继续使用这些方法.
根据POSIX Bracket表达式 [: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);
Run Code Online (Sandbox Code Playgroud)
请注意,VT(垂直选项卡)和FF(换页,新页面)也会保留.根据您的具体情况,您可能也想要删除它们:
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F\x0A\x0C]+/', '', $message);
Run Code Online (Sandbox Code Playgroud)