ExBB Community » » PHP/Perl » Помогите доделать функцию создания абзацев

Страниц (1): [1]
 

1. Gori - 29 августа 2015 — 07:41 - перейти к сообщению
Есть функция:
CODE:
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;
}

Очень полезная фунция.
Каждый перенос строки она переделывает в новый абзац, т.е. помещает фрагмент текста в теги <p></p>
Допустим я ввёл текст:

CODE:

Бла бла бла и бла бла бла.

Тум пурум пурум пурум.

Ля ля ля.


Результатом будет:

CODE:

<p>Бла бла бла и бла бла бла.</p>
<p>Тум пурум пурум пурум.</p>
<p>Ля ля ля.</p>

В отличие от функции "nl2br" которая создаёт тупо однии <br>, эта функция делает контент более статейным разделяя его как и положено на абзацы.

Но есть проблема.

Допустим я хочу чтобы не все новые строчки переделывались в абзацы, чтобы когда два переноса - был обзац, а когда один перенос - был <br>.

Т.е. если я ввожу вот так (один перенос):

CODE:

Бла бла бла и бла бла бла.
Тум пурум пурум пурум.
Ля ля ля.

То эта фунция всё равно мне всё оформит в теги <p></p>:
CODE:

<p>Бла бла бла и бла бла бла.</p>
<p>Тум пурум пурум пурум.</p>
<p>Ля ля ля.</p>

А мне нужно чтобы это было как положено, т.е. вот так:
CODE:

<p>Бла бла бла и бла бла бла.<br>
Тум пурум пурум пурум.<br>
Ля ля ля.</p>


Сам я никогда не решу эту задачу. Может быть поможет кто?
2. 1Bot - 29 августа 2015 — 13:39 - перейти к сообщению
Gori пишет:
хочу чтобы не все новые строчки переделывались в абзацы, чтобы когда два переноса - был абзац, а когда один перенос - был <br>.

CODE:
function nl2p($string) {
$s = "|\r\n|";
$d = "</p>\n<p>";
$string = "<p>". preg_replace($s, $d, $string) ."</p>";
$string = str_replace('<p></p>', '<br/>', $string);
return $string;
}
3. Gori - 29 августа 2015 — 15:45 - перейти к сообщению
1Bot , выводит теперь так:

CODE:
<p>Я мечтою ловил уходящие тени, </p>
<p>Уходящие тени погасавшего дня, </p>
<p>Я на башню всходил, и дрожали ступени, </p>
<p>И дрожали ступени под ногой у меня.</p>
<br/>
<p>И чем выше я шел, тем ясней рисовались, </p>
<p>Тем ясней рисовались очертанья вдали, </p>
<p>И какие-то звуки вокруг раздавались, </p>
<p>Вкруг меня раздавались от Небес и Земли.</p>
<br/>
<p>Чем я выше всходил, тем светлее сверкали, </p>
<p>Тем светлее сверкали выси дремлющих гор, </p>
<p>И сияньем прощальным как будто ласкали, </p>
<p>Словно нежно ласкали отуманенный взор.</p>
<br/>
<p>А внизу подо мною уж ночь наступила, </p>
<p>Уже ночь наступила для уснувшей Земли, </p>
<p>Для меня же блистало дневное светило, </p>
<p>Огневое светило догорало вдали.</p>
<br/>
<p>Я узнал, как ловить уходящие тени, </p>
<p>Уходящие тени потускневшего дня, </p>
<p>И все выше я шел, и дрожали ступени, </p>
<p>И дрожали ступени под ногой у меня.</p>
4. Gori - 1 сентября 2015 — 16:46 - перейти к сообщению
Помогли сдлать.

Делюсь тут рабочим кодом:

CODE:
$string = '<p>'.str_replace(["\r\n\r\n", "\n\n", "\r\r"], '</p><p>', $string).'</p>';
$string = str_replace(["\r\n", "\n", "\r"], '<br>', $string);


Работает в PHP 5.6
В ранних скобки не понимает.

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0257]     [ ]