将 \r\n 替换为 PHP

2022-08-30 12:23:38

我有一个帖子表单,它将我的文本插入MySQL数据库中。

我使用

$post_text = mysql_real_escape_string(htmlspecialchars($_POST['text']));

并希望替换自动添加的。\r\n

我试过了

$text = str_replace('\\r\\n','', $text);
$text = str_replace('\r\n','', $text);
$text = str_replace('\\R\\N','', $text);
$text = str_replace('\R\N','', $text);
$text = str_replace('/\r\\n','', $text);
$text = str_replace('/r/n','', $text);
$text = str_replace('/\R\\N','', $text);
$text = str_replace('/R/N','', $text);

但始终包含在我的数据库条目中。\r\n

我该如何解决这个问题?


答案 1

您尝试过的所有变体的主要问题是,两者和都是转义字符,只有在双引号字符串中使用它们时才会转义\n\r

在 PHP 中,和 之间有很大的区别。请注意第一个部分中的单引号和第二个部分中的双引号。'\r\n'"\r\n"

因此:将生成一个包含斜杠、“r”、另一个斜杠和'n'的四个字符字符串,而将包含两个字符,即新行和回车符。'\r\n'"\r\n"

因此,您问题的直接答案是,您需要使用您在问题中给出的第二个示例,但使用双引号而不是单引号:

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

值得指出的是,这将从输入中删除所有新行,并用任何内容替换它们。如果输入中有多个新行,它们将全部被删除。在不了解您的应用程序的更多信息的情况下,我不知道这是否是您想要的,但这里有一些想法:

  • 如果只想从输入字符串的末尾删除空行(和其他空格),则可以改用该函数。trim()

  • 如果要保留输出到HTML的格式,则该函数将为您提供帮助。如果要输出到不带格式的 HTML,则可能不需要删除它们,因为浏览器不会呈现 \n 字符的换行符。nl2br()

  • 如果将新行替换为无任何内容,则按照您的示例,第一行的最后一个单词现在将直接进入第二行的第一个单词,依此类推。您可能更愿意用空格字符替换它们,而不是什么都不替换。

  • 用户可能只在没有匹配的情况下提交输入,反之亦然(这可能是由于他们的操作系统或浏览器,或故意的黑客攻击,或许多其他原因)。如果要替换这两个字符的所有实例,则更可靠的方法是单独替换它们,而不是依赖于它们彼此相邻。 允许您通过在数组中指定它们来执行此操作。您也可以使用或实现相同的目标。\n\rstr_replace()strtr()preg_replace()

希望有所帮助。


答案 2

也试试

$text = str_ireplace(array("\r","\n",'\r','\n'),'', $text);

推荐