php:用</ p> <p>替换双<br />

And*_* SK 9 html php string

我使用nicEdit在我的CMS中编写RTF数据.问题是它生成如下字符串:

hello first line<br><br />this is a second line<br />this is a 3rd line
Run Code Online (Sandbox Code Playgroud)

因为这是一个新闻网站,我更喜欢最终的HTML如下:

<p>hello first line</p><p>this is a second line<br />this is a 3rd line</p>
Run Code Online (Sandbox Code Playgroud)

所以我目前的解决方案是:

  1. 我需要修剪<br />字符串开头/结尾的$ data
  2. 替换所有具有2个<br/>或更多的字符串</p><p>(<br />允许一个字符串).
  3. 最后,<p>在开始和</p>结束时添加

到目前为止我只有步骤1和3.有人可以帮我一步吗?

function replace_br($data) {
 # step 1
 $data = trim($data,'<p>');
 $data = trim($data,'</p>');
 $data = trim($data,'<br />');
 # step 2 ???
 // preg_replace() ?
 # step 3
 $data = '<p>'.$data.'</p>';
 return $data;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

ps:避免特定情况会更好.例如:" hello<br /><br /><br /><br /><br />too much space" - 这5个分隔线也应该只转换为一个" </p><p>"

最终解决方案(特别感谢kemp!)

function sanitize_content($data) {
    $data = strip_tags($data,'<p>,<br>,<img>,<a>,<strong>,<u>,<em>,<blockquote>,<ol>,<ul>,<li>,<span>');
    $data = trim($data,'<p>');
    $data = trim($data,'</p>');
    $data = trim($data,'<br />');
    $data = preg_replace('#(?:<br\s*/?>\s*?){2,}#','</p><p>',$data);
    $data = '<p>'.$data.'</p>';
    return $data;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*iva 16

即使两个<br>s在不同的行上(即它们之间有换行符或任何空格),这也可以工作:

function replace_br($data) {
    $data = preg_replace('#(?:<br\s*/?>\s*?){2,}#', '</p><p>', $data);
    return "<p>$data</p>";
}
Run Code Online (Sandbox Code Playgroud)