0

我正在将一些字段输入到数据库中。一个值为

foto's

当我检查$_POST[]包含它的地方时

foto\'s

这会自动发生吗?我的脚本中有(还没有)任何转义。

更新:所以这是魔术引号正在做的。php.ini 文件如下所示:

; Magic quotes
;

所以我把它改成:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

但在 phpinfo 这仍然是:

magic_quotes_gpc    On  On
4

3 回答 3

2

这可能是在行动中的魔术语录。立即禁用它们,然后按照通常的最佳实践来正确转义用户提供的输入,具体取决于您要使用它做什么。

于 2012-09-28T09:35:55.073 回答
0

关闭魔术引号

单击此处查看如何将其关闭。

于 2012-09-28T09:39:35.433 回答
0

由于存在可移植性问题,请始终关闭魔术代码。

下面的 php 代码将对您有用,即使魔术引号打开,此代码也将起作用(低于 php 版本 6):

function escape($string) {
    if (version_compare(phpversion(), '6', '<')) {
        if (get_magic_quotes_gpc())
            $string = stripcslashes($string);
    }
    if (!is_numeric($string))
        $string = addslashes($string);
    return $string;
}

用法:

$sql = "INSERT INTO employee(id, name) VALUES(1001, '".escape($_POST['name'])."')";

希望这可以帮助。

于 2012-09-28T10:39:26.757 回答