Pers.narod.ru. PHP. Статьи. NL2BR (New Line To BReak) сервис |
Довольно часто требуется преобразовать скопированный откуда-нибудь из интернета текст в простейший HTML так, чтобы переводы строк в этом тексте стали тегами разрыва строки <br>. Желательно также, чтобы "преобразователь" умел различать абзацы, отделённые хотя бы одной пустой строкой, и ставил в таких местах тег абзаца <p>.
В PHP для подобных целей есть готовая функция nl2br
, которая как раз заменяет переводы строки на тег <br>. Увы, она не отличит, где нужен абзац, а не перевод строки, а также не исключит лишние пустые строки из входных данных.
Если нужный нам текст содержится в переменной $text
, а выходную строку пишем в $text2
, в голову приходит такой алгоритм:
$str=explode ("\n",$text); $text2=''; $c=count($str); if ($c<2 and strlen(trim($str[0]))==0) $c=0; for ($i=0; $i<$c;$i++) { $str[$i]=trim($str[$i]); if ($i==0 or strlen($str[$i-1])==0) $s='<p>'.$str[$i]; else $s='<br>'.$str[$i]; if (strlen($str[$i])>0) { $text2.=$s; if ($i<$c-1) $text2.="\n"; } } if ($c>0) $text2.='</p>';
Обеспечив минимальный сервис - форму для ввода текста и вывода результата, удаление лишних пробелов в строках и между словами, а также удаление нескольких идущих подряд пустых строк, получаем вот такой скрипт-сервис:
http://scripts.kislenko.net/nl2br/
Архив ZIP с исходником скрипта nl2br (2 Кб)
P.S. По ссылкам выше представлена обновлённая версия сервиса, в которую добавлены 2 опции:
1 2 222 3
в
<p>1 <br>2 222</p> <p>3</p>
вместо
<p>1<br>2 222</p> <p>3</p>
при выключенной опции.
гостевая; E-mail |