转义查询字符串变量


PHP Escaping query string variables

我在我的web应用程序中创建了一个表单,它只有一个文本字段,该字段使用GET发布到PHP页面,但我观察到奇怪的行为。也就是说,当我测试它在我的本地服务器上,文本是收到的,因为它是写在文本字段,但当我把它上传到我的在线服务器,收到的字符串是自动转义的意思,所有单引号和双引号都转义。例如,如果我写It's not true...,那么在php端我将得到

$comment = $_REQUEST["comm"];
print $comment;
//will print It''s not true... on my online server
//will print It's not true... on my local server

我还是不明白为什么会这样?是否有任何PHP设置自动转义查询字符串变量?

您启用了"魔术引号"。这是一个可怕的错误特性,幸运的是下一个PHP版本将会删除。PHP手册中有禁用它们的指南。

简而言之,您需要在php.ini文件中设置以下配置项为Off:

  • magic_quotes_gpc
  • magic_quotes_runtime
  • magic_quotes_sybase

具体来说,您的问题似乎是magic_quotes_gpc -"gpc"部分是"GET, POST和COOKIE"的缩写-但保持所有这些禁用是很好的做法。

代码会告诉你所需要的一切。

function mysql_prep($value) {
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0
if ($new_enough_php) { // PHP v4.3.0 or higher
    // undo any magic quote effects so mysql_real_escape_string can do the work
    if ($magic_quotes_active) {
        $value = stripslashes($value);
    }
    $value = mysql_real_escape_string($value);
} else { // before PHP v4.3.0
    // if magic quotes aren't already on then add slashes manually
    if (!$magic_quotes_active) {
        $value = addslashes($value);
    }
    // if magic quotes are active, then the slashes already exist
}
return $value;
}

创建上述函数并将值传递给该函数

,然后调用像

这样的值
$yourVar = mysql_prep($_POST['yourControlName']);

我认为这是php.ini文件中的设置。你可以调用一个PHP函数来禁用它,但到那时已经太晚了。