1

我最近将服务器从 Ubuntu 更改为 UNIX。在 MySQL 和 PHP 的 Ubuntu 安装上,所有字符串在插入数据库之前都需要进行转义,并且从数据库中读取时不需要额外的转义字符。然而,在新系统上,用户输入到表单中的字符串在没有被修改的情况下,在没有转义的情况下被很好地插入到数据库中。如果转义,则会添加额外的字符。但随后我需要使用简单的 .= 向用户输入的字符串添加一个标签,并且除非转义,否则该字符串拒绝输入数据库。并且字符串的原始用户输入部分有额外的转义字符。有什么简单的解决方案吗?(PHP 5.2.17、MySQL 5.1、Apache 2.2.19)

4

1 回答 1

1

此处有关于魔术引号及其影响脚本的说明。基本上,此功能会影响来自浏览器的用户输入,但不会影响您自己创建的其他字符串。

听起来相关设置magic_quotes_gpc在您的旧服务器上已关闭,但在新服务器上已激活。我总是根据运行时的设置删除魔术引号,以便在所有机器上进行相同的设置,即使我无法控制php.ini.

尝试在任何输入参数处理之前将其放在中央包含文件中:

// Strip slashes from a string or array recursively
function stripshashesr($text)
{
    if (is_array($text))
    {
        foreach($text as $key => $value) $text[$key]=stripshashesr($value);
        return $text;
    }
    return stripslashes($text);
}

// Strip slashes from GPC
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
    foreach($_GET as $key => $value) $_GET[$key]=stripshashesr($value);
    foreach($_POST as $key => $value) $_POST[$key]=stripshashesr($value);
    foreach($_REQUEST as $key => $value) $_REQUEST[$key]=stripshashesr($value);
    foreach($_COOKIE as $key => $value) $_COOKIE[$key]=stripshashesr($value);
}

这会根据设置自动删除魔术引号。

于 2012-07-22T06:49:29.103 回答