【问题标题】:Why would \n\r appear if I used nl2br()?如果我使用 nl2br() 为什么会出现 \n\r?
【发布时间】:2011-09-26 12:41:39
【问题描述】:

有人刚刚在我的网站上创建了一个群组,其描述为\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);

您可以在here 看到这种情况。

你看上面写着\n\r Welcome to Join

为什么没有变成&lt;br /&gt;标签?

这可能很重要,这是我首先将这段文本放入数据库的方式:

$group_description = mysql_real_escape_string($_POST['group_description']);
// And then insert the $group_description into the db without doing any more operations on it.

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

【问题讨论】:

  • ` \r\n ` 只有一个文本,而不是特殊字符。这些实际上是 4 个字符:backslash, r, backslash, n.

标签: php encoding nl2br


【解决方案1】:

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

您可以使用正则表达式 (preg_replace) 或 str_replace 来替换它们。但问题可能是由数据插入数据库的方式引起的。

例如:

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

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

【讨论】:

  • “但问题可能” --- 我会说这绝对是一个问题 - 如何插入数据。所以唯一的解决办法是解决问题根源,而不是解决后果。
  • @zerkms - 我完全同意。 :)
  • 所以本质上,在插入过程中,我应该在调用 mysql_real_escape_string 之前执行 nl2br - 对吗?
  • @Genadinik - 是的。 mysql_real_escape_string(nl2br($_REQUEST['field']));.
【解决方案2】:

你自己回答了。 mysql_real_escape_string 还将换行符转换为转义序列 \r\n

您必须首先应用您的转换(包括nl2br)并在mysql_query 之前进行数据库转义/编组。 (但你知道,还有更容易使用的数据库 API。)

【讨论】:

    猜你喜欢
    • 2022-09-15
    • 1970-01-01
    • 2023-03-14
    • 2019-06-10
    • 2015-02-11
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多