所以基本上当我输入撇号的东西时,比如约翰的自行车,它会回应约翰的自行车。以下代码:
<?php
$searchname = $_POST["name"] ;
echo "$searchname";
我的表单使用POST方法。有没有办法阻止这个?
另外,为了使输入大小写不敏感,我将如何处理此段?
$searchsport = $_POST['sport'];
$sportarray = array(
"Football" => "Fb01",
"Cricket" => "ck32",
"Tennis" => "Tn43",
);
if(isset($sportarray[$searchsport])){
header("Location: ".$sportarray[$searchsport].".html");
die;
}
//what code is needed to make the if statement work? I've looked up some weird ways such as using array_change_key_case (which I clearly don't understand).
答案 0 :(得分:5)
这很可能是因为您已启用 magic quotes ,请尝试以下操作:
if (get_magic_quotes_gpc())
{
$searchname = stripslashes($_POST["name"]);
echo "$searchname";
}
else
{
$searchname = $_POST["name"];
echo "$searchname";
}
事实上,您可以创建一个函数,而不是自动为您执行此操作:
function fixIt($str)
{
if (is_array($str))
{
foreach ($str as &$value)
{
$value = fixIt($value);
}
return $str;
}
else
{
return stripslashes($str);
}
}
然后你可以做到:
$searchname = fixIt($_POST["name"]);
echo $searchname;
注意:您还可以禁用php.ini中的丑陋魔术引号,因为它们存在问题并且已正确弃用,并且不在PHP的未来版本中。
答案 1 :(得分:4)
有几种方法。
关闭php.ini中的magic_quotes_gpc
magic_quotes_gpc = 0
在请求的开头,运行stripslashes
if (get_magic_quotes_gpc() && !function_exists('FixMagicQuotesGpc')) {
function FixMagicQuotesGpc($data) {
if (is_array($data)) {
foreach ($data as &$value) {
$value = FixMagicQuotesGpc($value);
}
return $data;
} else {
return stripslashes($data);
}
}
$_GET = FixMagicQuotesGpc($_GET);
$_POST = FixMagicQuotesGpc($_POST);
$_REQUEST = FixMagicQuotesGpc($_REQUEST);
}
编辑:添加了!function_exists部分。这样,你不必担心如果你之前运行它,它只是跳过它,如果它已经运行(由另一个文件等)
答案 2 :(得分:2)
这由magic_quotes_gpc
配置变量控制。这真的很烦人(并且已弃用!)。
您应该在php.ini
中将其关闭,或者询问您的网络托管服务商是否可以采取相关措施。
如果他们不能,您可以使用addslashes
和stripslashes
手动转义/取消转义。但要注意 - 您应该使用比addslashes
更安全的东西来提交数据库。 mysql_real_escape_string
是更好的选择,或者是特定于您的数据库的函数:
mysqli_escape_string
sqlite_escape_string
答案 3 :(得分:0)
我在配置文件中包含以下脚本,以便在必要时修复魔术引号。这样我就不必担心主机的魔术引号设置了。
<?php
set_magic_quotes_runtime(0);
function _remove_magic_quotes(&$input) {
if(is_array($input)) {
foreach(array_keys($input) as $key) _remove_magic_quotes($input[$key]);
}
else $input = stripslashes($input);
}
if(get_magic_quotes_gpc()) {
_remove_magic_quotes($_REQUEST);
_remove_magic_quotes($_GET);
_remove_magic_quotes($_POST);
_remove_magic_quotes($_COOKIE);
}
return true;
?>
答案 4 :(得分:0)
Magic Quotes ...当PHP 6终于到来并删除这个不兼容的怪物时,我会非常高兴。
最好的解决方案是通过设置
在php.ini中关闭它magic_quotes_gpc = Off
如果您无法访问php.ini但使用的是Apache,您也可以在.htaccess
文件中禁用它:
php_flag magic_quotes_gpc Off
最后一个方案是在你的应用程序中禁用它。 PHP手册的Disabling Magic Quotes页面建议使用:
<?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);
}
?>