如何删除字符串中的所有不可打印字符并保留一些?

How to remove all non printable characters in a string and keep some?

我正在使用这个

$string = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $string);

那个正则表达式来自这个 link PHP: How to remove all non printable characters in a string?

正则表达式正在删除 \n 但我想保留它。 我该怎么办?

我认为 \n000A,所以我试过类似的方法(它会使所有正则表达式停止工作) $string = preg_replace('/[\x00-\x1F\x7F\xA0[ˆ\x0A]]/u', '', $string);

感谢任何帮助。

范围 \x00-\x1F 包含 \x0A

你必须拆分这个范围。

$string = preg_replace('/[\x00-\x09\x0B-\x1F\x7F\xA0]/u', '', $string);

试试这个

[\x00-\x1F\x7F\xA0[^\x0A^\x0d]]

解释:

x0A - 换行 (\n)

x0d - 回车 return (\r)

示例

https://regexr.com/3k3bm

对原始正则表达式的最小更改:

/(?!\n|\r)[\x00-\x1F\x7F-\xFF]/u

使用否定先行来不匹配换行和回车 returns。