使用带有html标签的nl2br

时间:2011-05-24 09:05:05

标签: php html nl2br

我在显示保存在某处的某些信息时会使用nl2br,但是当使用HTML标记时,我不想为它们添加<br>标记。

例如,如果我使用

<table>
<th></th>
</table>

它将转换为

<table><br />
<th></th><br />
</table><br />

这为这张桌子留出了很多空间。

何可以为其他非HTML内容添加断行标记?

感谢。

3 个答案:

答案 0 :(得分:6)

我也有同样的问题,

我制作了这段代码,在每一行的末尾添加<br />,除非该行以html标记结尾:

function nl2br_save_html($string)
{
    if(! preg_match("#</.*>#", $string)) // avoid looping if no tags in the string.
        return nl2br($string);

    $string = str_replace(array("\r\n", "\r", "\n"), "\n", $string);

    $lines=explode("\n", $string);
    $output='';
    foreach($lines as $line)
    {
        $line = rtrim($line);
        if(! preg_match("#</?[^/<>]*>$#", $line)) // See if the line finished with has an html opening or closing tag
            $line .= '<br />';
        $output .= $line . "\n";
    }

    return $output;
}

答案 1 :(得分:2)

您只需关闭代码即可替换结束标记和换行符:

$str = str_replace('>
', '>', $str);

答案 2 :(得分:0)

我认为你的问题是错误的。如果您正在输入

<table>
<th></th>
</table>

进入文本区域然后无论你做什么它都会包含<br />。因为这是nl2br应该做的事情。