我使用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)
所以我目前的解决方案是:
<br />字符串开头/结尾的$ data<br/>或更多的字符串</p><p>(<br />允许一个字符串).<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)
| 归档时间: |
|
| 查看次数: |
8765 次 |
| 最近记录: |