我的获取变量被逃脱了吗?
-
29-09-2019 - |
题
我在这里真的很困惑,有人可以向我解释吗?
要求:http://example.com/test.php?var=String's
$a = $_GET["var"];
$b = "String's";
echo $a . "<br/>";
echo $b . "<br/>";
$output = mysql_real_escape_string($a);
$output = mysql_real_escape_string($b);
echo "<hr/>";
echo $a . "<br/>";
echo $b . "<br/>";
结果:
String\'s
String's
----------------
String\'s
String's
有人可以向我解释为什么我的Get变量会这样转换,而且我如何消除这种行为,以使我的输入完全按照发送?我有一个问题,我的SQL包装器通过mysql_real_escape_string()将其传递给 String\\\'s
:(
解决方案
叫做 “魔术报价”.
其他提示
你可以 应该 禁用魔术报价。
更喜欢的模式
将它们放在php.ini中
.htaccess模式
将其添加到您的htaccess文件中
php_flag magic_quotes_gpc off
PHP5运行时模式
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_gpc(&$value)
{
$value = stripslashes($value);
}
array_walk_recursive($_GET, 'stripslashes_gpc');
array_walk_recursive($_POST, 'stripslashes_gpc');
array_walk_recursive($_COOKIE, 'stripslashes_gpc');
array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}
?>
PHP4运行时模式
<?php
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);
}
?>
欢迎来到 magic_quotes
仇恨俱乐部! :)
不隶属于 StackOverflow