小编典典

用PHP替换\ r \ n

mysql

我有一个张贴表单,可将​​我的文本插入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始终包含在我的数据库条目中。

我怎样才能解决这个问题?


阅读 574

收藏
2020-05-17

共1个答案

小编典典

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

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

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

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

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

值得指出的是,这将从输入中删除 所有
新行,并将其替换为空。如果输入中有多个新行,则将其全部删除。在不了解您的应用程序的情况下,我不知道这是否是您想要的,但是这里有一些想法:

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

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

  • 按照示例,如果您什么都没有替换新行,则第一行的最后一个单词将直接进入第二行的第一个单词,依此类推。您可能更喜欢用空格字符而不是什么代替它们。

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

希望能有所帮助。

2020-05-17