我使用以下简单代码使帖子对输出和格式化安全。
它运作良好但使用[list]添加了我不想要的换行符:
function tohtml($text, $charset = 'utf-8') {
$text = htmlspecialchars($text, ENT_QUOTES, $charset);
$basic_bbcode = array('[b]', '[/b]',
'[i]', '[/i]',
'[u]', '[/u]',
'[s]', '[/s]',
'[list]', '[/list]',
'[*]', '');
$basic_html = array('<b>', '</b>',
'<i>', '</i>',
'<u>', '</u>',
'<s>', '</s>',
'<ul>', '</ul>',
'<li>', '</li>');
$text = str_replace($basic_bbcode, $basic_html, $text);
return str_replace(array('\\r\\n','\r\\n','r\\n','\r\n', '\n', '\r'), '<br />', nl2br($text));
例如:
This is a list
[list]
[*]List item 1
[*]List item 2
[/list]
在来源中给出:
This is a list<br>
<ul><br>
<li>List item 1<br></li>
<li>List item 2<br></li>
</ul>
为什么要在<br>
内部<li>
?
我可以以某种方式删除<br>
内发生的每个<ul>
吗?
答案 0 :(得分:1)
如果它们始终为<br></li>
,那么您可以轻松地使用<br></li>
执行</li>
的其他str_replace。
编辑:或者可能是这样的:
$newlines = array('<br></li>', '<br /></li>', '<br/></li>');
$str = str_ireplace($newlines, "</li>", $str);