用PHP替换\ r \n

nja*_*jak 34 php mysql replace insert

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

我用

$post_text = mysql_real_escape_string(htmlspecialchars($_POST['text']));
Run Code Online (Sandbox Code Playgroud)

并想要替换\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);
Run Code Online (Sandbox Code Playgroud)

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

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

Spu*_*ley 63

你有所有你已经尝试了变化的主要问题是,无论是\n\r是转义字符被当你在一个双引号字符串使用它们才躲过.

在PHP中,'\r\n'和之间存在很大差异"\r\n".请注意第一个中的单引号和第二个中的双引号.

所以: '\r\n'将产生一个包含斜杠,'r',另一个斜杠和'n'的四个字符串,而"\r\n"将包含两个字符,即新行和回车符.

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

$text = str_replace("\r\n",'', $text);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果要保留输出到HTML的格式,那么该nl2br()功能将帮助您.如果要在没有格式化的情况下输出到HTML,则可能不需要删除它们,因为浏览器不会从\n字符中呈现换行符.

  • 如果您根据示例替换新行,则第一行的最后一个单词现在将直接运行到第二行的第一个单词,依此类推.您可能更喜欢用空格字符替换它们而不是空格.

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

希望有所帮助.


Ita*_*vka 11

也尝试

$text = str_ireplace(array("\r","\n",'\r','\n'),'', $text);
Run Code Online (Sandbox Code Playgroud)

  • 而是使用stri_replace,使用str_ireplace` $ text = str_ireplace(array("\ r","\n",'\n','\n'),'',$ text);` (4认同)

Vin*_*kal 5

   if (!is_numeric($value)) {
        $value = mysql_real_escape_string(trim($value));
        $value = str_replace("\\r\\n",'', $value);
    }
Run Code Online (Sandbox Code Playgroud)