在PHP中过滤所有类型的空格

Nun*_*uno 5 php whitespace

我知道有很多类型的空间(em空间,空间,稀疏空间,不间断空间等),但是,我提到的所有这些都有HTML实体(至少,PHP的htmlentities()返回类似的东西&EMSP ;.

但是,那些没有HTML实体的空间呢?
示例:http://iorbix.com/1001-p-Nuno-Peralta
查看此帐户的昵称.它在前面有很多""(空格),对我们来说是可见的(这不会发生在 ).

我尝试使用正则表达式过滤,使用\ x转义,使用str_replace()过滤,以空格作为参数,根本没有运气!

您对如何过滤所有类型的空白有什么建议吗?

sal*_*the 22

\s默认情况下,不会匹配值大于128的空白字符.为了实现这些,您可以更好地利用其他支持UTF-8的序列.


(标准免责声明:我正在浏览PCRE源代码以编译下面的列表,我可能会错过一个字符或输入错误的内容.请原谅我.)

\p{Zs} 火柴:

  • U + 0020空间
  • U + 00A0不间断空间
  • U + 1680 Ogham空间标记
  • U + 180E蒙古元音分离器
  • U + 2000 En quad
  • U + 2001 Em四元组
  • U + 2002 En空间
  • U + 2003 Em空间
  • U + 2004三人空间
  • U + 2005四人空间
  • U + 2006每个六人空间
  • U + 2007图空间
  • U + 2008标点符号空间
  • U + 2009薄空间
  • U + 200A发空间
  • U + 202F狭窄的不间断空间
  • U + 205F中等数学空间
  • U + 3000表意空间

\h(水平空白)与\p{Zs}上面的相同,加上

  • U + 0009水平标签.

类似地,对于匹配垂直空白,有几个选项.

\p{Zl} 匹配U + 2028行分隔符.

\p{Zp} 匹配U + 2029段落分隔符.

\v(垂直空白)匹配\p{Zl},\p{Zp}以及以下内容

  • U + 000A换行
  • U + 000B垂直标签
  • U + 000C Formfeed
  • U + 000D回车
  • U + 0085下一行

让我们再回到开始,在UTF-8模式(即使用u模式修改)\s将匹配任何字符\p{Z}相匹配(这是任何\p{Zs},\p{Zl}并且\p{Zp}将匹配),加

  • U + 0009水平标签
  • U + 000A换行
  • U + 000C Formfeed
  • U + 000D回车

长话短说(我打赌你读了以上所有内容,不是吗?)你可能想要使用\s但确保采用UTF-8模式/\s/u.把它用于一些实际用途,从字符串中过滤掉那些匹配的空白字符,你会做类似的事情

$new_string = preg_replace('/\s/u', '', $old_string);
Run Code Online (Sandbox Code Playgroud)

最后,如果你真的非常关心\s(LF和NEL)中没有包含的垂直空白,那么你可以使用字符类[\s\v]来匹配上面列出的所有26个空白字符.