nl2br不适合我

seb*_*ebb 11 php

nl2br从我的数据库中获取数据后,我无法使用函数:

$result = mysql_query("SELECT comments..etc.etc..");

while ($row = mysql_fetch_array($result))
{
  echo nl2br($row["comments"]);
}
Run Code Online (Sandbox Code Playgroud)

在数据库行中comments:

\r\nThanks,\r\n
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

与DB相同:

\r\nThanks,\r\n
Run Code Online (Sandbox Code Playgroud)

如果我只是这样测试它,它工作正常:

<?php
$mystring = "\r\nThanks,\r\n";
echo nl2br($mystring);
?>
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

converts \r \n to <br />
Run Code Online (Sandbox Code Playgroud)

bco*_*sca 27

试试这个:

echo preg_replace('/\v+|\\\r\\\n/Ui','<br/>',$row["comments"]);
Run Code Online (Sandbox Code Playgroud)


Dan*_*aws 11

我知道这是一个很老的帖子,但如果像我一样,你偶然发现了这个问题并且以上内容对你不起作用,这个解决方案可能会帮助你:

echo nl2br(stripslashes($row["comments"]));
Run Code Online (Sandbox Code Playgroud)

或者(它们的功能不同,请注意剥离后的附加"c")

echo nl2br(stripcslashes($row["comments"]));
Run Code Online (Sandbox Code Playgroud)

看到帮助我的原始线程:nl2br()在显示SQL结果时不起作用

  • 感谢您发帖。我发现 nl2br 在 PHP 脚本中(在 Smarty 模板中)不起作用,直到我第一次调用 stripcslashes。 (2认同)

You*_*nse 5

在将数据添加到数据库时,很可能您正在进行两次转义.
检查将数据添加到数据库的代码,并删除不必要的转义.

最有可能的是,这是一种毫无意义的"普遍消毒"功能.

嗯,这很容易.
让我们来一个引用,而不是一个新线来展示.行为一样.被剥离的斜线然后数据进入数据库.

因此,在正常情况下:

source:It's
转义后:It\'s
通过查询执行斜杠被剥离,并
在数据库和后面都被删除It's

在双逃逸案件中:

source:It's
在转义之后:It\'s
在第二次转义之后:It\\\'s
通过查询执行斜杠被剥离并且
在数据库和后面It\'s
都被我们的数据破坏了.

只是让自己明白逃避我不是一些神奇的东西,使你的数据"安全"(因此可以做多次,你可能认为).它只是为某些符号添加反斜杠.


bhu*_*hya 5

以下解决方案适用于 Windows 以及 linux/unix 机器

str_replace(array("\\r\\n", "\\r", "\\n"), "<br />", "string");