PHP заменяет \r\n <br/"> не заменяет новые строки

В основном у меня есть этот script, который я пытаюсь заменить \r\n на <br /> для правильного форматирования. Я пробовал nl2br(), и он не заменил \r\n на <br />. Вот код.

$title = isset($post[0]) ? $post[0] : false;
$body = isset($post[1]) ? preg_replace('#(\r|\r\n|\n)#', '<br/>', $post[1]) : false;
echo $title."<br/>".$body;  

Ответ 1

$body = isset($post[1]) ? preg_replace('#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $post[1]) : false;

Вам понадобится три \\\. Внутри одинарных кавычек \\ переводится на \, поэтому \\\r становится \\r, который подается на funciton preg_replace.

Двигатель PREG имеет свой собственный набор управляющих последовательностей и \r является одним из них, что означает символ ASCII # 13. Чтобы сообщить движку PREG о поиске литерала \r, вам нужно передать строку \\r, которая должна быть удалена еще раз, так как она у вас внутри одинарных кавычек.

Ответ 2

Если он отображает \r и \n в вашем html, это означает, что это не символы новой строки и строки, а escape-обратные слэши, за которыми следуют r или n (\\r например). Вам нужно снять эти косые черты или обновить регулярное выражение для их учета.

Ответ 3

Как отметил @tandu, если вы видите \r или \n в html, тогда вам нужно использовать stripslashes() перед тем, как применить nl2br(). Косые черты автоматически добавляются, если вы получаете данные из формы.

Таким образом, ваш код станет следующим:

$title = isset($post[0]) ? nl2br(stripslashes($post[0])) : false;
$body = isset($post[1]) ? nl2br(stripslashes($post[1])) : false;
echo $title."<br/>".$body;

Надеюсь, что это поможет.

EDIT: Ум... просто другая мысль. Если вы используете $_POST [0] и $_POST [1]?

Ответ 4

Когда я прочитал комментарии к вопросу, я предложил бы попробовать следующий код:

$title = isset($post[0]) ? $post[0] : false;
$body = isset($post[1]) ? preg_replace('#(\\r\\n|\\r|\\n)#', '<br/>', $post[1]) : false;
echo $title."<br/>".$body;

Ответ 5

Вы можете попробовать следующее:

$body = nl2br(strtr($post[1], array('\r' => chr(13), '\n' => chr(10))));

Ответ 6

попробуйте str_replace() функция

$title = isset($post[0]) ? $post[0] : false;
$body = isset($post[1]) ? str_replace('\r\n', '<br/>', $post[1]) : false;
echo $title."<br/>".$body;