从PHP中的字符串中删除控制字符

时间:2017-02-02 22:19:21

标签: php regex

我的MySQL数据库中有很多字符串,它们具有控制字符,例如^M。我想要一个在PHP中删除它的正则表达式,但只留下诸如新行之类的东西,例如:" \ n"。

我尝试过以下方法:

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

这似乎让它留在原地。

摆脱这些控制角色的最佳方式是什么?

2 个答案:

答案 0 :(得分:4)

  

我想要一个在PHP中删除它的正则表达式,但只留下诸如此类的东西   新行,例如:“\ n”

使用以下方法:

preg_replace("/(\x0A)|[[:cntrl:]]/", "$1", $bad);

\x0A - 指向换行符

[[:cntrl:]] - 代表所有控制字符

(\x0A)|[[:cntrl:]] - 一次匹配换行符或某些控制字符的替换组。

$1只有匹配时才会保留第一个作为换行符的捕获组

答案 1 :(得分:1)

您可以使用此替代品:

$result = preg_replace('~[^\P{Cc}\r\n]+~u', '', $str);

\p{Cc}是控制字符的unicode字符类。 \P{Cc}相反(所有不是控制字符)

[^\P{Cc}\r\n]完全不是\P{Cc}\r\n

u修饰符确保字符串和模式读取为utf8字符串。

如果要保留其他控制字符(例如TAB),请将其添加到否定字符类:[^\P{Cc}\r\n\t]