从 PHP 字符串中删除控件字符

2022-08-30 08:37:22

如何从 PHP 字符串中删除 STX 等控制字符?我玩了一下

preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString)

但发现它删除了很多。有没有办法删除控件字符?


答案 1

如果你的意思是控制字符的前32个ascii字符和\x7F(包括回车符等!),那么这将起作用:

preg_replace('/[\x00-\x1F\x7F]/', '', $input);

(注意单引号:使用双引号会导致解析错误,不知何故。\x00

换行符和回车符(通常写成和)可以从删除中保存,如下所示:\r\n

preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $input);

我必须说,我认为Bobby的答案更好,从某种意义上说,[:cntrl:]更好地传达了代码的作用。[\x00-\x1F\x7F]

警告:ereg_replace在 PHP >= 5.3.0 中已弃用,但在 PHP >= 7.0.0 中删除!,请使用以下替代:preg_replaceereg_replace

preg_replace('/[[:cntrl:]]/', '', $input);

答案 2

对于 Unicode 输入,这将从输入文本中删除所有控制字符、未分配、专用、格式设置和代理代码点(这些字符也不是空格字符,如制表符、换行符)。我用它来从输入中删除所有不可打印的字符。

<?php
$clean = preg_replace('/[^\PC\s]/u', '', $input);

有关详情,请参阅 http://www.regular-expressions.info/unicode.html#category\p{C}


推荐