PHP 删除分隔线之间的多余空格

PHP Remove extra spaces between break lines

我在 PHP 中有一个字符串,我可以删除多个连续的断行和多个 space,但我仍然无法删除多个断行,如果我在中间有一个 space。 例如:

Text \r\n \r\n extra text

我想将此文本清理为:

Text \r\nextra text

也可能是:

Text \r\n \r\nextra text

分界线后不需要额外的espace。 我现在拥有的是:

function clearHTML($text){
    $text = strip_tags($text);
    $text = str_replace(" ", " ", $text);
    $text = preg_replace("/[[:blank:]]+/"," ",$text);
    $text = preg_replace("/([\r\n]{4,}|[\n]{2,}|[\r]{2,})/", "\r\n", $text);
    $text = trim($text);
    return $text;
}

有什么建议吗?

要删除行间多余的空格,您可以使用

preg_replace('~\h*(\R)\s*~', '', $text)

正则表达式匹配:

  • \h* - 0 个或多个水平空格
  • (\R) - 第 1 组:任何行结束序列(替换为 </code>,仅此组值)</li> <li><code>\s* - 一个或多个空格

空白缩减部分可以合并到单个 preg_replace 调用,使用 (?:&nbsp;|\h)+ 正则表达式匹配一次或多次出现的 &nbsp; 字符串或水平空白。

注意:如果你有 Unicode 文本,你将需要 u 标志。

整个清理功能可以像

function clearHTML($text){
    $text = strip_tags($text);
    $text = preg_replace("~(?:&nbsp;|\h)+~u", " ", $text);
    $text = preg_replace('~\h*(\R)\s*~u', '', $text);
    return trim($text);
}