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

标签 php html string

我使用 nicEdit 在我的 CMS 中写入 RTF 数据。问题是它会生成这样的字符串:

hello first line<br><br />this is a second line<br />this is a 3rd line

因为这是一个新闻网站,我更喜欢最终的 html 是这样的:

<p>hello first line</p><p>this is a second line<br />this is a 3rd line</p>

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

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

到目前为止,我只有第 1 步和第 3 步。有人可以帮助我完成第 2 步吗?

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;
}

谢谢!

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;
}

最佳答案

即使两个 <br> 也会起作用s 在不同的行上(即它们之间有一个换行符或任何空格):

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

关于php: 用 </p><p> 替换双 <br/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959734/

相关文章:

javascript - 对话框内的选项卡导致对话框的高度为 :auto to not work

CSS Div 尊重其他 div

java - 我将字符串存储在二维数组中。但是,当我打印结果时,[0][0] 空格为空白。有人可以告诉我如何占据那个空间吗?

delphi - 如何在Delphi 2009中使用反向字符串功能?

php - 手动 wp_install() 困难

php - 时间表统计 PHP 页面

PHP 将字符串转换为孟加拉语语言类型的 SEO 友好 URL

javascript - 从 android Activity 调用 javascript 函数

python - 检查字符串中的有效域名?

javascript - 从 PHP 返回 JSON,将 JSON 转换为 javascript 数组,从 AJAX 调用返回数组