Php 如果使用nl2br(),为什么会出现\n\r?

Php 如果使用nl2br(),为什么会出现\n\r?,php,encoding,nl2br,Php,Encoding,Nl2br,有人刚刚在我的网站上创建了一个组,其描述为\n\r。问题是,我已经对描述文本执行了以下操作: //Convert all urls to links $group_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $group_description); $pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s]+)#i'; $replacem

有人刚刚在我的网站上创建了一个组,其描述为
\n\r
。问题是,我已经对描述文本执行了以下操作:

//Convert all urls to links
$group_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $group_description);
$pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s]+)#i';
$replacement = '<a href="$1" target="_blank">$1</a>';
$group_description = preg_replace($pattern, $replacement, $group_description);

$group_description = str_replace("\'" , "'", $group_description );
$group_description = nl2br($group_description);

/* Convert all E-mail matches to appropriate HTML links */
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.';
$pattern .= '[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
$replacement = '<a href="mailto:\\1">\\1</a>';
$group_description = preg_replace($pattern, $replacement, $group_description);

知道我为什么仍然收到
\n\r

问题是\r和\n分别以“\”r”和“\”“\n”的形式存储在数据库中。它们不是存储为回车符或换行符,而是后跟字母的斜杠字符。调用
nl2br()
时,它查找的是新行字符,而不是它的文本表示形式。希望这是有道理的

您可以使用正则表达式(
preg\u replace
)或
str\u replace
来替换它们。但问题可能是由数据如何插入数据库引起的

例如:

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

你会注意到我用单引号表示第一个,双引号表示第二个。使用单引号时,“\r”和“\n”存储为文本,而不是特殊字符。这可能是因为它们没有正确地存储在数据库中。

问题是\r和\n在数据库中分别存储为“\”“r”和“\”“\n”。它们不是存储为回车符或换行符,而是后跟字母的斜杠字符。调用
nl2br()
时,它查找的是新行字符,而不是它的文本表示形式。希望这是有道理的

您可以使用正则表达式(
preg\u replace
)或
str\u replace
来替换它们。但问题可能是由数据如何插入数据库引起的

例如:

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

你会注意到我用单引号表示第一个,双引号表示第二个。使用单引号时,“\r”和“\n”存储为文本,而不是特殊字符。这可能是因为它们没有正确存储在您的数据库中。

您自己已经回答了
mysql\u real\u escape\u string
还将换行符转换为转义序列
\r
\n


您必须首先应用转换(包括
nl2br
),并在mysql\u查询之前执行数据库转义/编组。(但您知道,还有更易于使用的数据库API。)

您自己已经回答了
mysql\u real\u escape\u string
还将换行符转换为转义序列
\r
\n


您必须首先应用转换(包括
nl2br
),并在mysql\u查询之前执行数据库转义/编组。(但您知道,还有更易于使用的数据库API。)

`\r\n`这里只有一个文本,而不是一个特殊的字符。这是4个字符:
反斜杠,r,反斜杠,n
`\r\n`只有一个文本,没有特殊字符。这是4个字符:
反斜杠,r,反斜杠,n
“但问题可能在于”——我想说这肯定是个问题——数据是如何插入的。因此,唯一的解决办法是解决问题的根源,而不是解决后果。@zerkms-我完全同意。:)所以本质上,在插入中,我应该在调用mysql_real_escape_string之前执行nl2br-正确吗?@Genadinik-是的<代码>mysql_real_escape_字符串(nl2br($_REQUEST['field'])“但问题可能”——我认为这绝对是一个问题——如何插入数据。因此,唯一的解决办法是解决问题的根源,而不是解决后果。@zerkms-我完全同意。:)所以本质上,在插入中,我应该在调用mysql_real_escape_string之前执行nl2br-正确吗?@Genadinik-是的<代码>mysql_real_escape_字符串(nl2br($_REQUEST['field'])