Php反斜杠问题

时间:2013-03-29 13:13:30

标签: php mysql

我有一个由Php处理的html表单。当我提交表格时,如果我写的话,它会显示反斜杠: 5 rue de l'ourq 。如果再次提交表单是因为我错误地输入了表单中的任何其他字段,那么它会显示 5 rue de l \'ourq 并再次 5 rue de l \\'ourq 。这发生在地址提交。

Php变量:

$address = $_POST['address'];   
$title = inputvalid($_POST['title']);   
$f_name = inputvalid($_POST['f_name']);

问题是$ address变量。我不知道它为什么显示反斜杠。这就是为什么我没有将 inputvalid 函数添加到该变量但无法解决此问题的原因。有什么想法吗?

5 个答案:

答案 0 :(得分:6)

听起来你已经开启了magic_quotes。你需要在php设置中关闭它们。

如果你无法关闭magic_quotes,我会让你的inputvalid()函数做的第一件事就是检查magic_quotes是否已启用,如果它们是值stripslashes()

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

根据上面的链接,您可以通过添加以下代码来模拟运行时禁用,但它实际上只是做了我上面说的那样,检查magic_quotes是否在输入数组上stripslashes()上:

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);
}

答案 1 :(得分:0)

PHP添加反斜杠以逃避',因为它实际上意味着打开一个字符串。

使用stripslashes()删除它们。

答案 2 :(得分:0)

您的inputvalid函数阻止了SQL注入,这些注入用于加载和修改数据库中的信息。该函数会转义'"以阻止进样。在从数据库加载信息后,您的代码应该能够将这些转义字符转换回人类可读的格式。

答案 3 :(得分:0)

将它放在配置文件中:

ini_set('magic_quotes_gpc', 'off');

或者,如果您的服务器上不允许这样做,请将其放入config:

##/ Special Code to stop get_magic_quotes_gpc
function stop_magic_quotes($in)
{
    $out = $in;

    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
    {
        if(is_array($out))
        {
            foreach($out as $k=>$v)
            {
                $v = stop_magic_quotes($v);
                $out[$k] = $v;
            }
        }
        else
        {
            $out = stripslashes($out);
        }
    }

    return $out;
}//end func................

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
    $_GET = array_map('stop_magic_quotes', $_GET);
    $_POST = array_map('stop_magic_quotes', $_POST);
}//end if....

答案 4 :(得分:0)

从我对此问题的评论:

检查php.ini文件中的magic_quotes_gpc选项并将其设置为Off。别忘了重启php进程。如果您无法直接访问php.ini文件,请尝试以下操作:

 <?php ini_set('magic_quotes_gpc', 'Off'); ?>