Как заменить & на?


Пытаюсь просто заменить несколько новых строк. Попробовал 3 разных способа, и я не получил никаких изменений:

$description = preg_replace('/\r?\n|\r/','<br/>', $description);
$description = str_replace(array("\r\n","\r","\n"),"<br/>", $description);
$description = nl2br($description);

Все это должно работать, но я все равно получаю новые строки. Они двойные: "\r\r". Это не должно привести ни к одному из них, верно?

Author: kenorb, 2011-05-10

8 answers

Уже есть nl2br() функция, которая заменяет вставки <br> теги перед символами новой строки:

Пример (кодовый контроллер):

<?php
// Won't work
$desc = 'Line one\nline two';
// Should work
$desc2 = "Line one\nline two";

echo nl2br($desc);
echo '<br/>';
echo nl2br($desc2);
?>

Но если он все еще не работает, убедитесь, что текст $desciption заключен в двойные кавычки.

Это потому, что одинарные кавычки не "расширяют" escape-последовательности, такие как \n, по сравнению со строками в двойных кавычках. Цитата из документации PHP:

Примечание: В отличие от двойных кавычек и синтаксисы heredoc, переменные и escape-последовательности для специальных символов не будут расширены, если они встречаются в строках в одинарных кавычках.

 99
Author: Robik, 2015-03-03 00:14:22

Попробуйте использовать это

$description = preg_replace("/\r\n|\r|\n/",'<br/>',$description);
 52
Author: afarazit, 2013-11-06 19:10:07

В строке могут быть реальные символы "\" (строки в одинарных кавычках, как сказал @Robik).

Если вы совершенно уверены, что строки "\r" или "\n" также должны быть заменены, я здесь не говорю о специальных символах, а о последовательности из двух символов "\" и "r", затем экранируйте "\" в строке замены, и это сработает:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);
 14
Author: regilero, 2011-05-10 07:12:03

nl2br() как у вас, это должно работать нормально:

$description = nl2br($description);

Более вероятно, что незакрытый ' в первой строке вашего примера кода вызывает вашу проблему. Удалите 'после $описания...

...$description');
 5
Author: sakatc, 2011-05-10 06:49:43

Это точно сработает:

str_replace("\\r","<br />",$description); 
str_replace("\\n","<br />",$description); 
 2
Author: Radeck, 2012-09-22 10:14:28

Nl2br() работал для меня, но мне нужно было заключить переменную в двойные кавычки:

Это работает:

$description = nl2br("$description");

Это не работает:

$description = nl2br($description);
 2
Author: infografnet, 2015-10-28 23:36:26

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

echo str_replace( array('\r\n','\n\r','\n','\r'), '<br>' , $description );
 1
Author: l2aelba, 2017-03-07 13:28:10

Если вы используете nl2br, все вхождения \n и \r будут заменены на <br>. Но если (я не знаю, как это происходит) вы все еще получаете новые строки, вы можете использовать

str_replace("\r","",$description);
str_replace("\n","",$description);

Для замены ненужных новых строк пустой строкой

 -2
Author: Evgeniy Skulditsky, 2011-05-10 06:57:20