替换多个换行符、制表符和空格

2022-08-30 11:45:51

我想用一个换行符替换多个换行符,用一个空格替换多个空格。

我试过了,但失败了!preg_replace("/\n\n+/", "\n", $text);

我也在格式化$text上做这项工作。

$text = wordwrap($text, 120, '<br/>', true);
$text = nl2br($text);

$text是一个从用户那里获取的用于BLOG的大文本,为了更好的格式,我使用换行。


答案 1

从理论上讲,正则表达式确实有效,但问题是并非所有操作系统和浏览器都只在字符串末尾发送\n。许多人还会发送 \r。

尝试:

我简化了这个:

preg_replace("/(\r?\n){2,}/", "\n\n", $text);

并解决某些仅发送 \r 的问题:

preg_replace("/[\r\n]{2,}/", "\n\n", $text);

根据您的更新:

// Replace multiple (one ore more) line breaks with a single one.
$text = preg_replace("/[\r\n]+/", "\n", $text);

$text = wordwrap($text,120, '<br/>', true);
$text = nl2br($text);

答案 2

使用 \R(表示任何行结束序列):

$str = preg_replace('#\R+#', '</p><p>', $str);

它被发现在这里:用段落标签替换两个新行

关于转义序列的 PHP 文档:

\R(换行符:匹配 \n、\r 和 \r\n)


推荐