Использование nl2br с тегами html - PullRequest
1 голос
/ 24 мая 2011

Я использую nl2br при отображении некоторой информации, которая сохраняется где-то, но когда используются теги HTML, я не хочу добавлять <br> теги для них.

Например, если я использую

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

будет преобразовано в

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

и это делает много места для этой таблицы.

Как можно добавить теги разрыва строки только для другого содержимого, отличного от HTML?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 17 декабря 2012

Я бы с таким же вопросом,

Я сделал этот код, добавив <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;
}
2 голосов
/ 24 мая 2011

Заменить закрывающие теги и символы новой строки можно только закрывающими тегами:

$str = str_replace('>
', '>', $str);
0 голосов
/ 24 мая 2011

Я думаю, что ваш вопрос неправильный. Если вы печатаете

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

в текстовую область, тогда независимо от того, что вы делаете, между ними будет <br />. Потому что это то, что nl2br должен делать.

...