gpt4 book ai didi

PHP mysql_real_escape_string() -> stripslashes() 留下多个斜杠

转载 作者:IT王子 更新时间:2023-10-29 00:04:21 25 4
gpt4 key购买 nike

我在使用 PHP/MySQL 转义/剥离字符串时遇到问题 - 似乎总是有多余的斜线。


我们以下面的字符串为例:

<span style="text-decoration:underline;">underline</span>


将字符串添加到数据库时,我使用 mysql_real_escape_string() 将其转义并将以下内容存储在数据库中(EDIT:通过直接查询数据库来检查这一点mysql 应用程序):

<span style=\\\"text-decoration:underline;\\\">underline</span>


从数据库中读回时,我将字符串传递给 stripslashes() 并返回以下内容:

<span style=\"text-decoration:underline;\">underline</span>


由于引号仍然被转义,它破坏了 html 并且文本没有下划线。


  1. 为什么 mysql_real_escape_string() 添加三个斜杠,而 stripslashes() 删除两个斜杠?我希望他们都添加/删除一个斜杠。
  2. 如何防止这种情况发生?
  3. 我的处理方式是否正确?

最佳答案

最佳解决方案

在您的 php.ini 文件中,很可能是 magic_quotes_gpc指令设置为打开。出于安全原因,应禁用此功能。如果您无权访问 php.ini 文件(例如,在共享主机上),您始终可以使用 .htaccess 指令(假设这是一个 apache 服务器)来完成相同的操作。

在你的 php.ini 中

magic_quotes_gpc Off

在 .htaccess 文件中:

php_flag magic_quotes_gpc Off

为什么会这样?

发生这种情况的原因是由于以下逻辑过程。

  1. 需要转义的字符串被发送到服务器。
    • 这是我的字符串。太棒了。
  2. Magic Quotes 在到达您的代码之前转义撇号。
    • 这是我的字符串。太棒了
  3. mysql_real_escape_string 现在有两个字符需要转义,反斜杠 \\ 以及撇号 \'
    • 这是我的字符串。它\\\太棒了
  4. 这个新的 super 转义字符串存储在数据库中。
  5. 当从数据库中检索到字符串时,它会传递给 stripslashes。这删除了在步骤 3 中添加的两个转义符,但由于其中一个反斜杠已被转义,stripslashes 认为它属于。
    • 这是我的字符串。太棒了

当您将这些字符串重新提交到数据库时,这个问题真的会失控,因为每次反斜杠的数量都会成倍增加。

替代方案

一种快速简便的替代方法是在将字符串传递给 mysql_real_escape_string 之前简单地删除 magic_quotes 添加的斜杠。

$str = stripslashes($_POST['str']);
$str = mysql_real_escape_string($str);

关于PHP mysql_real_escape_string() -> stripslashes() 留下多个斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com