2011-05-24 62 views
1

我在使用nl2br時顯示一些信息保存在某處,但是當使用HTML標籤時,我不想爲它們添加<br>標籤。使用帶html標籤的nl2br

例如,如果我用

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

將轉化爲

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

,這讓很多的這個表空間。

Ho可以打破線條標籤只能添加其他非HTML內容?

謝謝。

+3

這是一個非常模糊的問題,這相當於「我使用功能做一些事來的一些信息的地方,但我不希望使用它在某些SI tuations「。只是不要在那些你不想要新的'
'的字符串上調用'nl2br'? – 2011-05-24 09:10:45

+1

那麼如果我不叫它,那麼其他非html標籤呢,他們需要斷線。解決方案是@Michiel Pater的帖子。如果你沒有任何解決方案,請不要發帖。你可以告訴我不要使用它,當我需要它時..請不要發佈.. – 2011-05-24 09:20:34

回答

2

您可以通過僅關閉標籤更換結束標記和換行符:

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

呃,在這種情況下字面換行是可怕的。更好的使用'「> \ n」' – ThiefMaster 2011-05-24 09:19:21

+0

heh,奇怪的代碼風格:)新行符號可以用'PHP_EOL'常量或''\ n「'表示。 – 2011-05-24 09:20:00

+0

謝謝你。 :) – 2011-05-24 09:21:15

0

我認爲你的問題是錯誤的。如果你打字

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

到文本區域,然後不管你做什麼,這將包括在它們之間<br />。因爲這是nl2br應該做的。

4

我最好了同樣的問題,

我做了這個代碼,每行除了結尾處添加一個<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; 
} 
+0

謝謝Nicalas。 :) – 2012-12-21 14:42:02