如何用新行替换所有XHTML / HTML换行符(<br>)?

2022-08-30 12:21:26

我正在寻找最好的功能。我想用换行符替换和 的所有实例。很像 nl2br() 函数,但恰恰相反。br2nl<br><br />\n

我知道PHP手册评论中有几个解决方案,但我正在寻找SO社区对可能解决方案的反馈。


答案 1

我通常会说“不要使用正则表达式来使用HTML”,但是,在这个上,我可能会使用正则表达式,考虑到标签通常看起来像:<br>

  • <br>
  • 或 ,在<br/>/


我想这样的东西可以做到这一点:

$html = 'this <br>is<br/>some<br />text <br    />!';
$nl = preg_replace('#<br\s*/?>#i', "\n", $html);
echo $nl;

一些注意事项:

  • 开头为<br
  • 后跟任意数量的白色字符:\s*
  • 选项,a ://?
  • 最后,一个>
  • 并且使用不区分大小写的匹配(),这在HTML中是有效的#i<BR>

答案 2

您应该使用常量来拥有独立于平台的换行符。PHP_EOL

在我看来,尽可能使用非正则表达式函数会使代码更具可读性。

$newlineTags = array(
  '<br>',
  '<br/>',
  '<br />',
);
$html = str_replace($newlineTags, PHP_EOL, $html);

我知道这个解决方案有一些缺陷,但仍然想分享我的见解。


推荐