当前位置: 首页 > 面试题库 >

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

郑西岭
2023-03-14
问题内容

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

让我们以以下字符串为例:

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

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

<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指令被设置为on。出于安全原因,应禁用此功能。如果您无权访问php.ini文件(例如,在共享主机上),则始终可以使用.htaccess指令(假设这是apache服务器)完成相同操作。

在您的php.ini中

magic_quotes_gpc Off

在.htaccess文件中:

php_flag magic_quotes_gpc Off

为什么会这样呢?

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

  1. 需要转义的字符串发送到服务器。
    • This is my string. It's awesome.
  2. Magic Quotes在到达您的代码之前先将撇号转义。
    • This is my string. It\'s awesome
  3. mysql_real_escape_string现在有两个字符可以转义,即反斜杠\\和撇号\'
    • This is my string. It\\\'s awesome
  4. 此新的超级转义字符串存储在数据库中。
  5. 从数据库中检索到字符串后,会将其传递给stripslashes。这将删除在第3步中添加的两个转义符,但是由于其中一个反斜杠已被转义,因此stripslashes认为它属于该转义符。
    • This is my string. It\'s awesome

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

替代解决方案

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

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


 类似资料:
  • 问题内容: 这是一个“到底发生了什么”的问题。我实际上不需要解决方案。 我必须用双反斜杠替换字符串中的所有单反斜杠。这就是我最终要做的… …其中strRootDirectory是上面的java.lang.String。 现在,我了解了第一个参数的四个反斜杠:regex期望两个反斜杠以表示单个文字反斜杠,而Java希望它们加倍。没关系。 但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不是应该

  • 有效URL:http://localhost:8080/api/abc 无效URL: http://localhost:8080////api/abc http://localhost:8080/////api///abc http://api/////abc 问题:我的控制器接受以上所有URL。我想限制它,只接受有效的url,并在无效的url上抛出错误。 注意:我没有使用任何自定义路由。这是sp

  • 问题内容: 我有以下问题: 我有一个向服务器执行AJAX请求的脚本,该服务器在预览中返回。但是,响应为。没什么大不了的,因为我只是想用单斜杠代替双斜杠。我一直在这里查看堆栈,但是我只能找到如何用双反斜杠替换单反斜杠,但反之亦然。 有人可以帮我这个忙吗? 问题答案: 应该这样做: 在正则表达式中,必须将单个转义为,在替换中也必须转义。

  • 在web中。xml我已经将URL模式指定为rest,并在RestServicePathParamJava4s中指定。java我们将类级路径指定为客户,方法级路径指定为国家 所以最终的URL应该是 响应应显示为 如果我给出下面给出的2输入,它显示错误。如何解决这个问题? 这里这是一个字符串,它包含正斜杠。如何通过使用或任何我需要使用的东西来接受这个。如果有人知道这个,请帮助我。如果有人知道什么是,给

  • 我正在努力在我的应用程序中获得一致的对齐,该应用程序是用GWT编写的,并通过基于WebKit的JavaFX 2.2 WebView(Java 7u40)进行查看。 我遇到的问题是,JavaFX中的CSS布局属性似乎存在问题/缺乏支持。文件(http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html)表示支持CSS 2