|
|
|
| Вопрос задавался неоднократно и многие советуют использовать функции nl2br(), wordwrap(), но они не подходят мне.
Дело в том, что я хочу сделать вывод текста из БД таким образом, чтобы абзацы были оформлены в тег <p>.
Я написал такую вот функцию:
<?php
function replace($rn)
{
$rn = str_replace("\n", "<p>", $rn);
$rn = str_replace("\r", "</p>", $rn);
return $rn;
}
?>
|
Но проблема в том, что если сделать несколько обрывов строк, то в тег <p> ничего не попадает и в исходном коде странице получается следующее:
Может быть есть проверенный способ вывода теста абзацами, нежели моя функция? | |
|
|
|
|
|
|
|
для: Alexo
(19.05.2011 в 13:08)
| | Мы обычно поступаем так, разбиваем текст на отдельные строки при помощи регулярного выражения /[\r\n]+/ и функции preg_split(), а потом каждую строку в полученном массиве выводим как отдельный параграф. | |
|
|
|
|
|
|
|
для: cheops
(19.05.2011 в 13:13)
| | А можно вот так форматировать?
<?php
function nl2p($string) {
$s = ("|\r\n|");
$d = ("</p>\n<p>");
$string = "<p>". preg_replace($s, $d, $string) ."</p>";
$string = str_replace('<p></p>', '', $string);
return $string;
}
?>
|
| |
|
|
|
|
|
|
|
для: Alexo
(19.05.2011 в 14:09)
| | Хм... ну можно вероятно, на мой взгляд код не очень прозрачный, однако, если работает, почему бы нет. Я бы еще для надежности и пустые строки удалял при помощи регулярного выражения, вставив в между <p> и </p> возможные пробельные символы. | |
|
|
|
|
|
|
|
для: cheops
(19.05.2011 в 14:16)
| | Спасибо за подсказку. Я между <p> и </p> вставил | |
|
|
|