如果我已启用magic_quotes
并使用mysql_real_escape_string
,那么该字符串是否会被双重转义?它会引起问题吗?
我假设基于get_magic_quotes()
函数,但只是寻求确认。
(P.S。提问这个问题比在我的办公室测试它更容易,我们已经拥有了所有的安全性 - 我需要10-15个配置才能获得可用的环境)
答案 0 :(得分:4)
阅读documentation of mysql_real_escape_string
(我希望这也不困难):
注意:如果启用了
magic_quotes_gpc
,请先将stripslashes()
应用于数据。对已经转义的数据使用此函数将两次转义数据。
答案 1 :(得分:3)
如果你转义从get / post / cookie输入中获得的值,它已经应用了addslashes()
,所以将它传递给mysql_real_escape_string()
实际上是双引号。
剥离em:
if (get_magic_quotes_gpc())
{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
ini_set('magic_quotes_gpc', 0);
}
This question还有一些其他选项可以删除引号/处理可怕的magic_quotes_gpc
PHP'功能'。
答案 2 :(得分:1)
当然,最简单的方法是关闭magic_quotes wuth通常是PHP / Apache配置,这一行
php_flag magic_quotes_gpc 0
<{1}}文件中的会做的事情。
但出于兼容性目的,也可以在某些配置文件中使用函数。
.htaccess
最简单的一个
答案 3 :(得分:0)
如果我启用了magic_quotes并且 我使用mysql_real_escape_string,将 tring是双重逃脱?
是的,它会,但你可以做这样的事情:
if (get_magic_quotes_gpc())
{
$escaped = stripslashes($your_vars);
}
注意:您可以禁用PHP.ini中的魔术引号或使用以下函数覆盖它:
// no more magic quotes
function get_magic_quotes_gpc()
{
return false;
}