【问题标题】:PHP - Remove excess Whitespace but not new linesPHP - 删除多余的空白但不是新行
【发布时间】:2013-05-19 12:27:47
【问题描述】:

我正在寻找一种从字符串中删除多余空格的方法(即,如果两个或更多空格彼此相邻,则只保留 1 个并删除其他空格),我找到了这个Remove excess whitespace from within a string,我想使用这个解决方案:

$foo = preg_replace( '/\s+/', ' ', $foo );

但这也会删除新行,而我想保留它们。 有没有办法在删除多余空格的同时保留换行符?

【问题讨论】:

  • 用空格替换\s ?如果您还想删除标签,请使用/[\t ]+/

标签: php regex newline whitespace trim


【解决方案1】:

如果您的某些符号在 preg_replace 之后转换为 �(例如,西里尔大写字母 R / Р),请使用 mb_ereg_replace 而不是 preg_replace

$value = mb_ereg_replace('/\h+/', ' ', $value);

【讨论】:

    【解决方案2】:

    如果您想删除多余的唯一空格(不是制表符、换行符等),您可以使用 HEX 代码更具体:

        $text = preg_replace('/\x20+/', ' ', $text);
    

    【讨论】:

    • 有很多不是 ASCII 32 (\x20) 空格的空格字符。
    【解决方案3】:

    http://www.php.net/manual/en/regexp.reference.escape.php 定义\h any horizontal whitespace character (since PHP 5.2.4) 所以可能你正在寻找

    $foo = preg_replace( '/\h+/', ' ', $foo );

    示例:http://ideone.com/NcOiKW

    【讨论】:

    • 我认为这是错误的,因为对我来说它删除了所有空格:)
    • 为了保留换行符,您可以采取一种解决方法,例如将所有字符串按换行符拆分为数组,清理每个部分并通过换行符再次内爆
    猜你喜欢
    • 2017-01-15
    • 2018-06-02
    • 1970-01-01
    • 2022-01-19
    • 2015-04-03
    • 2012-01-24
    • 2021-10-16
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多