可能重复:
Why are escape characters being added to the value of the hidden input
我正在查询数据库中表的用户帖子。当我输出它们并且它们包含撇号时,在撇号之前插入反斜杠。
为什么这样做?我该怎么做才能解决这个问题?
示例:
I'm hiking in Colorado's Mountains.
I\'m hiking in Colorado\'s Mountains.
答案 0 :(得分:1)
两个可能的原因:
原因一:
您的服务器上启用了魔术引号。要测试魔术引号,只需使用以下代码:
if(get_magic_quotes_gpc()){
echo 'Magic quotes are enabled...';
}
如果启用了魔术引号,则需要禁用它们(并向您的网络主机投诉)。 PHP manual has a page dedicated to disabling magic quotes。
原因二:
您(或您的某个输入函数)正在使用addslashes()作为SQL注入的保护。这不安全。准备好的语句(使用PDO或mysqli)是防止SQL注入的唯一可接受的保护方法。
答案 1 :(得分:0)
很可能是转义字符(由于mysql_real_escape_string)或沿着这些行的东西。您可以使用stripslashes()
函数删除斜杠,但我建议您在数据上使用htmlentities()
或htmlspecialchars()
来增加安全性。
答案 2 :(得分:0)
您可以使用http://php.net/manual/en/function.mysql-escape-string.php。考虑使用http://php.net/manual/en/book.pdo.php它有方法准备哪个准备sql语句,它通常更好和它的OOP。 (我猜你正在使用mysql_ *函数)
答案 3 :(得分:0)
我认为你应该看看addslashes和stripslashes
实施例
$text = "I\'m hiking in Colorado\'s Mountains." ;
echo stripslashes($text);
输出
I'm hiking in Colorado's Mountains.
答案 4 :(得分:0)
您需要验证以下PHP配置设置:
自PHP 5.3.0开始,此功能已被弃用,自PHP 5.4.0起已被删除。
我的建议:将您的PHP版本升级到5.4.x,这个问题就会消失,您可以从许多其他新功能中获益。