作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在使用 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 并且文本没有下划线。
mysql_real_escape_string()
添加三个斜杠,而 stripslashes()
删除两个斜杠?我希望他们都添加/删除一个斜杠。最佳答案
在您的 php.ini 文件中,很可能是 magic_quotes_gpc
指令设置为打开。出于安全原因,应禁用此功能。如果您无权访问 php.ini 文件(例如,在共享主机上),您始终可以使用 .htaccess 指令(假设这是一个 apache 服务器)来完成相同的操作。
在你的 php.ini 中
magic_quotes_gpc Off
在 .htaccess 文件中:
php_flag magic_quotes_gpc Off
发生这种情况的原因是由于以下逻辑过程。
这是我的字符串。太棒了。
这是我的字符串。太棒了
mysql_real_escape_string
现在有两个字符需要转义,反斜杠 \\
以及撇号 \'
。
这是我的字符串。它\\\太棒了
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/
我是一名优秀的程序员,十分优秀!