Nickolay.info. 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. По ссылкам выше представлена обновлённая версия сервиса, в которую добавлены 3 опции:

Рейтинг@Mail.ru

вверх гостевая; E-mail