Формат\n\n в \n и отключить уникальный \n в PHP (a la reddit)
Я хочу сделать то же самое для своего веб-сайта, как я видел на reddit.
Когда вы \n один раз, это не сработает, вам придется сделать два \n\n, чтобы получить один
Я пробовал это:
$texte = preg_replace('#{\n}#', '', $texte);
$texte = preg_replace('#{\n}{\n}#', '\n', $texte);
$texte = nl2br($texte);
и он не работает... кто-то может помочь?
Ответы
Ответ 1
Попробуйте следующее:
$texte = preg_replace('#(\r\n|\r)#', "\n", $texte);
$texte = preg_replace('#\n(?!\n)#', ' ', $texte);
$texte = preg_replace('#\n\n#', "\n", $texte);
$texte = nl2br($texte);
Первая строка нормализует окончания строки. Второй заменяет одиночное \n
на пробел. Третья строка заменяет двойной \n
на один.
Ответ 2
$str = preg_replace('~(*BSR_ANYCRLF)\R(\R?)~', '$1', $str);
\R
с опцией (*BSR_ANYCRLF)
соответствует любой последовательности новой строки CRLF (оставьте опцию в соответствии со всеми линиями Unicode).
\R(\R)?
приведет к $1 = '\R'
с двумя новыми строками и $1 = ''
с одной новой строкой.
Вышеизложенное, однако, полностью удалит новую строку, если у вас есть только одна. Это, вероятно, не то, что вы хотите. Вместо этого я предлагаю оставить одиночные новые строки и преобразовать двойные символы новой строки в теги HTML <br />
:
$str = preg_replace('~(*BSR_ANYCRLF)\R{2}~', '<br />', $str);