从phpstring中删除控制字符

似乎微不足道,但给我一个困难时间:

有没有人有一个关于如何从PHPstring中删除像STX控制字符的提示。 我玩过

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

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

TIA

ķ

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

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

(注意单引号:用双引号\x00会导致一个分析错误,不知何故。)

换行符和回车符(通常写成\r\n )可以像下面这样保存:

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

我必须说,我认为鲍比的答案是更好的,因为[:cntrl:]更好地expression了代码的作用,而不是[\x00-\x1F\x7F] 。 所以,使用ereg_replace而不是preg_replace

警告: ereg_replace在PHP> = 5.3.0中被弃用,并且在PHP> = 7.0.0中被删除!

 ereg_replace('[:cntrl:]', '', $input); 

对于Unicodeinput,这将从您的input文本中删除所有控制字符,未分配,私人使用,格式和替代代码点(也不是空格字符,如制表符,新行)。 我使用这个从我的input中删除所有不可打印的字符。

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

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

PHP不支持POSIX-Classes,所以你可以使用[:cntrl:]来代替一些奇特的字符 – magic-stuff:

 ereg_replace("[:cntrl:]", "", $pString); 

编辑:

5.3中可能需要额外的一对方括号。

 ereg_replace("[[:cntrl:]]", "", $pString); 

为了保持控制字符,但使他们兼容的JSON,我不得不

 $str = preg_replace( array( '/\x00/', '/\x01/', '/\x02/', '/\x03/', '/\x04/', '/\x05/', '/\x06/', '/\x07/', '/\x08/', '/\x09/', '/\x0A/', '/\x0B/','/\x0C/','/\x0D/', '/\x0E/', '/\x0F/', '/\x10/', '/\x11/', '/\x12/','/\x13/','/\x14/','/\x15/', '/\x16/', '/\x17/', '/\x18/', '/\x19/','/\x1A/','/\x1B/','/\x1C/','/\x1D/', '/\x1E/', '/\x1F/' ), array( "\u0000", "\u0001", "\u0002", "\u0003", "\u0004", "\u0005", "\u0006", "\u0007", "\u0008", "\u0009", "\u000A", "\u000B", "\u000C", "\u000D", "\u000E", "\u000F", "\u0010", "\u0011", "\u0012", "\u0013", "\u0014", "\u0015", "\u0016", "\u0017", "\u0018", "\u0019", "\u001A", "\u001B", "\u001C", "\u001D", "\u001E", "\u001F" ), $str ); 

(JSON规则的状态:“除了必须转义的字符:引号,反转斜体和控制字符(U + 0000到U + 001F)外,所有Unicode字符都可以放在引号内。

正则expression式的自由方法

如果你只是把我熟悉的控制angular色(32和127以下的那些控制angular色),试试看:

  for($control = 0; $control < 32; $control++) { $pString = str_replace(chr($control), "", $pString; } $pString = str_replace(chr(127), "", $pString; 

循环删除了除DEL之外的所有内容,我们只是将其添加到最后。

我认为这会减轻你的压力,然后处理正则expression式和正则expression式库。