繁体   English   中英

PHP转义查询字符串变量

[英]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函数来禁用它,但到那时为时已晚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM