PHP 5.3.1默认情况下是否添加斜杠(“\”)?

时间:2010-01-23 11:57:53

标签: php

写作时

输入数据hel'l"lo

print_r($_POST) 显示 hel\'\"lo

当我使用

if(get_magic_quotes_gpc()){ 
    mysql_real_escape_string($_POST);

显示

hel\\\'\\\"lo

因为PHP会自动添加斜杠,是否需要使用mysql_real_escape_string

5 个答案:

答案 0 :(得分:3)

不,从5.3版开始,默认情况下不会添加斜杠。另请注意,addslashes mysql_real_escape_string的替代品;您可以阅读有关here的更多信息。

答案 1 :(得分:2)

magic_quotes_gpc在php 5.3上已弃用选项

答案 2 :(得分:0)

  

是否有必要使用mysql_real_escape_string?

是。但作为$_POST$_GET的一揽子编码。这是将输出阶段转义机制应用于输入阶段,这是错误的,并会以意想不到的方式破坏你的字符串。

在将字符串插入另一个上下文之前,您应该将字符串保持为原始格式。仅在那个点,您使用适当的转义函数。使用MySQL:

$query= "SELECT * FROM items WHERE title='"+mysql_real_escape_string($_POST['title'])+"'";

或HTML:

<p>Title: <?php echo(htmlspecialchars($_POST['title'])) ?></p>

答案 3 :(得分:0)

我最近使用了PHP 5.3.6的托管,启用了“magic_quotes_gpc”选项。 不幸的是,这是一个共享主机,所以我无法更改配置(同样“php_flag magic_quotes_gpc关闭”到.htaccess失败)。

对我有用的代码级解决方案是将其置于开头

if (get_magic_quotes_gpc() === 1)
{
    $_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);
}

另见

http://php.net/manual/en/security.magicquotes.disabling.php

答案 4 :(得分:0)

诚实地在互联网上找到了神奇的解决方案

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}