0

我有一个由 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函数放入该变量但无法解决此问题的原因。任何的想法 ?

4

5 回答 5

6

听起来你打开了magic_quotes。您需要在 php 设置中关闭它们。

如果你不能关闭magic_quotes,我会让你的inputvalid()函数做的第一件事是检查magic_quotes 是否启用,如果它们stripslashes()在值上。

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

根据上面的链接,您可以通过添加以下代码在运行时模拟禁用,但它实际上只是在做与我上面所说的相同的事情,检查stripslashes()输入数组上的 magic_quotes 是否打开:

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);
}
于 2013-03-29T13:15:20.677 回答
0

PHP 添加反斜杠来转义,'因为它的字面意思是字符串的开头。

用于stripslashes()删除它们。

于 2013-03-29T13:15:33.810 回答
0

您的inputvalid功能是防止用于从数据库加载和修改信息的 SQL 注入。该函数转义'"防止注射。在从数据库加载信息后,您的代码应该能够将这些转义字符转换回人类可读的形式。

于 2013-03-29T13:15:53.320 回答
0

把它放在你的配置文件中:

ini_set('magic_quotes_gpc', 'off');

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

##/ 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....
于 2013-03-29T13:17:17.120 回答
0

从我对这个问题的评论:

检查magic_quotes_gpcphp.ini 文件中的选项并将其设置为Off. 不要忘记重新启动 php 进程。如果您没有直接访问 php.ini 文件的权限,请尝试以下操作:

 <?php ini_set('magic_quotes_gpc', 'Off'); ?>
于 2013-03-29T13:17:57.513 回答