Отформатируйте \ n \ n в \ n и отключите уникальный \ n в PHP (как RedDit) - PullRequest
1 голос
/ 11 сентября 2011

Я хочу сделать то же самое для своего сайта, что я видел на Reddit.Когда вы \ n один раз, это не будет работать, вам придется сделать два \ n \ n, чтобы получить один

Я пробовал это:

$texte = preg_replace('#{\n}#', '', $texte);
$texte = preg_replace('#{\n}{\n}#', '\n', $texte);
$texte = nl2br($texte);

и это не работает ... кто-то может помочь?

Ответы [ 2 ]

5 голосов
/ 11 сентября 2011
$str = preg_replace('~(*BSR_ANYCRLF)\R(\R?)~', '$1', $str);

\R с параметром (*BSR_ANYCRLF) соответствует любой последовательности новой строки типа CRLF (удалите эту опцию, чтобы соответствовать всем новым строкам Юникода).

\R(\R)? приведет к $1 = '\R' с двумя символами новой строки и $1 = '' с одним символом новой строки.


Приведенный выше текст полностью пропустит символ новой строки, если у вас есть только один. Это, вероятно, не то, что вы хотите. Вместо этого я бы предложил оставить одиночные символы новой строки в одиночестве и преобразовать двойные символы новой строки в теги HTML <br />:

$str = preg_replace('~(*BSR_ANYCRLF)\R{2}~', '<br />', $str);
2 голосов
/ 11 сентября 2011

Попробуйте это:

$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 s пробелом. Третья строка заменяет двойной \n s на один.

...