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;