制作一个简单的bbcode函数,标签内部的换行符存在一些问题

时间:2015-12-20 02:18:41

标签: php

我使用以下简单代码使帖子对输出和格式化安全。

它运作良好但使用[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>吗?

1 个答案:

答案 0 :(得分:1)

如果它们始终为<br></li>,那么您可以轻松地使用<br></li>执行</li>的其他str_replace。

编辑:或者可能是这样的:

$newlines = array('<br></li>', '<br /></li>', '<br/></li>');
$str = str_ireplace($newlines, "</li>", $str);