【问题标题】:Using nl2br with html tags使用带有 html 标签的 nl2br
【发布时间】:2011-08-31 18:34:17
【问题描述】:

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

例如,如果我使用

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

它会变成

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

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

能否只为其他非 HTML 内容添加换行标记?

谢谢。

【问题讨论】:

  • 这是一个非常模糊的问题,相当于“我使用函数对某处的某些信息做某事,但我不想在某些情况下使用它。”只是不要在那些你不想要新的&lt;br /&gt;s 的字符串上调用nl2br
  • 好吧,如果我不调用它,那么其他非html标签呢,它们需要换行。解决方案是@Michiel Pater的帖子。如果您没有任何解决方案,请不要'不发布。你怎么能告诉我不要使用它,当我需要它时..请不要再发布了..

标签: php html nl2br


【解决方案1】:

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

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

进入一个文本区域然后无论你做什么它都会在它们之间包含&lt;br /&gt;。因为这是nl2br 应该做的。

【讨论】:

    【解决方案2】:

    你可以只用结束标签替换结束标签和换行符:

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

    【讨论】:

    • 呃,这种情况下的文字换行是可怕的。更好地使用"&gt;\n"
    • 嘿,奇怪的代码风格:)换行符可以用PHP_EOL常量或"\n"来表示。
    【解决方案3】:

    我也有同样的问题,

    我编写了这段代码,在每一行的末尾添加了一个&lt;br /&gt;,除非该行以 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 2012-07-01
      • 2012-01-03
      • 2012-10-27
      • 1970-01-01
      • 2013-08-08
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多