2011-03-07 17 views
3

我在表单提交时,通过textarea从admin中检索存储在数据库中的产品描述值。当我从数据库中选择描述时,我得到$description = $row['description'];,我想在主页上回显$ description,如下所示:echo nl2br($description);但我看到"\r\n"字符而不是创建新行。从我在这里和在网上发现,必须对双引号中使用你的字符串,如:如何使用nl2br()处理字符串' r n'?

echo nl2br("Hello, \r\n This is the description"); 

现在,$description从数据库中值实际上"Hello, \r\n This is the description"但在我的剧本我都使用这样的:

echo nl2br($description); 

不使BR的,它是outputing \r\n代替。所以,我能做些什么,根据我的经验,我不能在这里使用双引号。

+0

它是否与\\ r \\ n'中的反斜杠一起存储? 'nl2br()'应该对一个变量没有问题。 – 2011-03-07 23:34:41

回答

6

可以传递字符串通过nl2br(),像在此之前其转化为各自的转义序列:

$description = nl2br(str_replace('\\r\\n', "\r\n", $description)); 

但什么是字面摆脱在你的数据库中首先做?

+0

数据库插入时应如何处理$ _POST ['description']以保持新行完好无损?谢谢。 – 2011-03-08 00:00:21

+0

@Manny Calavera:如果你还没有使用textarea,你应该使用它。如果你想确保'\ r \ n'总是成为一个真正的新行,我想你可以在插入之前简单地运行'str_replace()',所以你不需要在读取之后执行它。 – BoltClock 2011-03-08 00:35:20

1

您正在将\r\n的字面值存储在您的数据库中,而不是它们表示的实际字符。

请在您的数据库中验证。如果您在说明字段中看到\r\n,那么当您存储数据时,您可能会转义反斜杠。

0

它看起来像你的文本包含单个字符\r\n,并不包含实际的换行符。因此,str_replace()应该把工作做好:

echo str_replace('\r\n', '<br>', $description); 
-2

nl2br可以为“is_xhtml”获取第二个(可选)参数,该参数将为您转换\r\n<br>。只需将您的线路更改为:

echo nl2br($description, TRUE); 
+3

我不认为这解决了问题。 – alex 2011-03-07 23:38:56

+0

可选参数默认为true。 – Adam 2017-05-30 14:46:12