代码之家  ›  专栏  ›  技术社区  ›  Nuno

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

  •  4
  • Nuno  · 技术社区  · 14 年前

    我知道有很多类型的空格(em space、en space、thin space、non breaking space等),但是,我提到的所有这些都有HTML实体(至少PHP的htmlentities()返回类似 。

    但是,那些没有HTML实体的空间呢?
    示例:[示例URL不再有效]
    看看这个帐户的昵称。它前面有许多“”(空格),我们可以看到这些“”(这在&中不会发生);nbsp;)。

    我已经尝试过用正则表达式过滤,使用\x escape,用str\u replace()过滤,用空格作为参数,一点运气都没有!

    3 回复  |  直到 6 年前
        1
  •  24
  •   salathe    14 年前

    \s 默认情况下,将 匹配值大于128的空白字符。为了达到这些目的,您可以很好地利用其他UTF-8感知序列。


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

    \p{Zs}

    • U+0020空格
    • U+00A0无中断空间
    • U+1680 Ogham空格标记
    • U+180E蒙古语元音分隔符
    • U+2001电磁四芯
    • U+2002 En空间
    • U+2003电磁空间
    • U+2004每个电磁空间三个
    • U+2006每个电磁空间6个
    • U+2008标点空格
    • U+2009精简空间
    • U+200A头发空间
    • U+205F中等数学空间

    \h (水平空白)匹配与 \p{Zs}

    • U+0009水平标签。

    类似地,对于匹配垂直空格,也有一些选项。

    \p{Zl}

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

    \v \p{Zl} \p{Zp}

    • U+000C进料
    • U+0085下一行

    回到开头,在UTF-8模式下(即使用 u 图案修改器) 将匹配 \p{Z} \p{Zs} , \p{Zp} 将匹配),加上

    • U+0009水平标签
    • U+000A线路馈线
    • U+000D回车

    长话短说(我敢打赌你读了上面所有的内容,不是吗?) \s码 /\s/u . 把它放到实际应用中,从字符串中过滤出那些匹配的空白字符

    $new_string = preg_replace('/\s/u', '', $old_string);
    

    最后,如果你真的,真的关心那些没有包含在 \s码 (LF和NEL)然后可以使用character类 [\s\v] 匹配上面列出的所有26个空格字符。

        2
  •  2
  •   animuson    14 年前

    trim() .

    preg_replace("/\s{2,}/", " ", $text);
    
        3
  •  1
  •   DrColossos    14 年前
    $result = preg_replace('/\s/', '', $yourString)
    

    看到了吗 http://www.php.net/manual/en/regexp.reference.backslash.php \s