我使用 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>
所以我目前的解决方案是这样的:
- 我需要修剪
<br />
的 $data在字符串的开头/结尾 - 替换所有包含 2
<br/>
的字符串或更多</p><p>
(允许一个<br />
)。 - 最后,添加
<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/