我有一个由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 函数添加到该变量但无法解决此问题的原因。有什么想法吗?
答案 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'); ?>