PHP заменяет двойные строки одним разрывом HTML


Я пытаюсь заменить все \n\n на моем сервере тегом <BR>, чтобы один \n не превратился в <BR>.

Пример:

Hello,\n\nThis is an\nexample.\n\nThanks!

Переходит к:

Hello,<BR>This is an\nexample,<BR>Thanks!

(обратите внимание, что одиночный \n не был заменен)

Когда я делаю следующее в PHP, это не заменяет две строки разрывом:

$str = str_replace("\n\n", "<br />", $str);
Author: Anonymous, 2012-05-31

2 answers

Ваши \n на самом деле \r\n (что означает, что входные данные поступили из операционной системы Windows), я предлагаю вам сначала нормализовать ваши новые строки до стандарта *nix со следующим регулярным выражением:

$str = preg_replace('~\r\n?~', "\n", $str);

Затем ваш исходный фрагмент будет работать (демо):

$str = str_replace("\n\n", '<br />', $str);

Вы также можете просто сделать:

$str = str_replace("\r\n\r\n", '<br />', $str);

Но это не сработало бы, если бы входные данные поступали из Linux или старой Mac OS (которая использует только \r).

 2
Author: Alix Axel, 2012-05-30 23:06:25

Вам нужно дважды экранировать своих персонажей:

Попробуйте:

$str = str_replace("\\n\\n", "<br />", $str);
 2
Author: sberry, 2012-05-30 22:53:09