可能重复:
为什么将转义字符添加到隐藏输入的值
我正在从数据库中的表中查询用户帖子。当我输出它们时,如果它们包含撇号,则会在撇号之前插入一个反斜杠。
为什么要这样做?我能做些什么来解决这个问题?
例子:
I'm hiking in Colorado's Mountains.
I\'m hiking in Colorado\'s Mountains.
可能重复:
为什么将转义字符添加到隐藏输入的值
我正在从数据库中的表中查询用户帖子。当我输出它们时,如果它们包含撇号,则会在撇号之前插入一个反斜杠。
为什么要这样做?我能做些什么来解决这个问题?
例子:
I'm hiking in Colorado's Mountains.
I\'m hiking in Colorado\'s Mountains.
两个可能的原因:
原因一:
您在服务器上启用了魔术引号。要测试魔术引号,只需使用以下代码:
if(get_magic_quotes_gpc()){
echo 'Magic quotes are enabled...';
}
如果启用了魔术引号,您需要禁用它们(并向您的网络主机投诉)。PHP 手册有一个页面专门用于禁用魔术引号。
原因二:
您(或您的输入函数之一)正在使用 addlashes() 作为对 SQL 注入的保护。这是不安全的。准备好的语句(使用 PDO 或 mysqli)是唯一可接受的防止 SQL 注入的方法。
它很可能会转义字符(由于 mysql_real_escape_string)或类似的东西。您可以使用stripslashes()
函数来删除斜杠,尽管我建议在数据上使用htmlentities()
或htmlspecialchars()
来增加一些安全性。
您可以使用http://php.net/manual/en/function.mysql-escape-string.php。考虑使用http://php.net/manual/en/book.pdo.php它有方法 prepare 准备 sql 语句,它通常更好,它的 OOP。(我猜你正在使用 mysql_* 函数)
我认为你应该看看addlashes和stripslashes
例子
$text = "I\'m hiking in Colorado\'s Mountains." ;
echo stripslashes($text);
输出
I'm hiking in Colorado's Mountains.
您需要验证以下 PHP 配置设置:
此功能自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已移除。
我的建议:将你的 PHP 版本升级到 5.4.x,这个问题就会消失,你会从许多其他新功能中受益。