2011-05-10 143 views
48

试图简单地替换一些新的行。已经尝试了3种不同的方式,我没有变化:如何用<br/>替换 r&n?

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

这些都应该工作,但我仍然得到换行符。他们是双重的:“\ r \ r”。这不应该使这些失败的权利?

+1

为什么你裸'\ r'换行符? AFAIK甚至MacOSX切换到'\ n'。 – ThiefMaster 2011-05-10 06:36:37

+0

他们来自客户的CSV。 – 2011-05-13 22:53:31

+0

[如何从字符串中删除换行符(无字符!)的可能的重复?](http://stackoverflow.com/questions/10757671/how-to-remove-line-breaks-no-characters-from-the -string) – kenorb 2015-03-03 00:28:21

回答

91

已经有nl2br()功能取代插入之前<br>标签换行字符:

例(codepad):

<?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是双引号。

这是因为与双引号字符串相比,单引号不会“扩大”转义序列,如\n。从PHP文档报价:

注意:当它们出现在单引号字符串特殊字符不像双引号和定界符语法,变量和转义序列不会被扩大。

+0

查看第3行。它不工作。 – 2011-05-10 06:36:43

+0

仔细一看,他的OP明确表示他们试图使用'nl2br'并且它不起作用。 – 2011-05-10 06:38:45

+0

试图用双回车返回字符串上运行nl2br,它工作正常。 – Decko 2011-05-10 06:41:29

-2

如果您正在使用nl2br\n\r所有出现将被<br>被替换。但是,如果(我不知道是怎么回事),你仍然可以得到新的线路,你可以使用

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

要由空字符串

+0

它们不是REPLACED – 2013-05-02 14:31:09

+0

'str_replace'中的'\ r'似乎取代了所有内容。此外,您应该用'
'替换它...... – 2014-08-11 00:14:54

5

nl2br()因为你拥有它应该很好地工作replase不必要新行:

$description = nl2br($description); 

您的示例代码的第一行未封闭的'更有可能导致您的问题。删除'$后描述...

...$description'); 
49

尝试使用此

$description = preg_replace("/\r\n|\r|\n/",'<br/>',$description); 
+7

更快的替代方案可以是$ description = str_replace([“\ r \ n”,“\ r”,“\ n”],“
”,$描述)'采取[这个答案](http://stackoverflow.com/a/20717751/2431281) – Keale 2015-07-29 09:33:21

+4

(也可以使用['/ \ R /'所有CR/LF](https:// nikic .github.io/2011/12/10/PCRE-and-newlines.html)linebreak组合。) – mario 2015-08-13 19:28:05

11

你可能有真正的字符 “\” 字符串中(单引号字符串,如说@Robik)。

如果您确定'\ r'或'\ n'字符串应该被替换,我不是在这里谈论特殊字符,而是两个字符'\'和'r'的序列,然后逃避替换字符串中的“\”,它会工作:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description); 
0

这将肯定工作:

str_replace("\\r","<br />",$description); 
str_replace("\\n","<br />",$description); 
+0

绝对不正确的建议。 “foo \\ r \\ nbar”将变成“foobar”而不是“foo
”。在替换html渲染之前“foo bar”。 – Artemix 2012-09-14 13:55:36

+0

呃。适用于输入格式已知的特定情况。 – evandentremont 2013-05-06 14:48:39

2

nl2br()为我工作,但我需要换用双引号变量:

此作品:

$description = nl2br("$description"); 

这不起作用:

$description = nl2br($description); 
0

试试这个:

echo str_replace(array('\r\n','\n\r','\n','\r'), '<br>' , $description); 
+0

阅读关于PHP [strings](http://php.net/manual/en/language.types.string.php)。 ['\ r \ n'](http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single)与['“\ r \ n“个'](http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double)。 – axiac 2018-02-22 10:05:25

+0

谢谢@axiac,我没有时间测试,但你的意思是它应该是''\ r \ n“'对吗? – l2aelba 2018-02-22 12:49:57

相关问题