我有一个小的PHP代码打印欢迎消息
<?php
echo "Hello ". $_GET['name'];
?>
Run Code Online (Sandbox Code Playgroud)
我已将此代码放在Godaddy服务器上托管的网站上,我发现服务器正在转发单引号和双引号.例如
http://www.example.com/test.php?name=test's
Run Code Online (Sandbox Code Playgroud)
版画
Hello test\'s
Run Code Online (Sandbox Code Playgroud)
但是相同的代码在我的PC上的apache服务器上运行正常.怎么解决这个问题?
将下一个代码放在一个.htaccess文件中,告知PHP 不应将魔术引号添加到G ET,P OST和C ookie变量中.
php_flag magic_quotes_gpc Off
Run Code Online (Sandbox Code Playgroud)
如果您的虚拟主机不允许您更改设置,则需要使用该stripslashes功能自行删除这些引号.由于$_GET/ $_POST/ $_COOKIE数组可能包含其他数组(通过使用字段名称name[full]=John Smit),因此需要一个递归函数来去除斜杠.例如,使用此评论中的代码段从输入中删除所有"魔术引号":
<?php
if (get_magic_quotes_gpc()) {
$strip_slashes_deep = function ($value) use (&$strip_slashes_deep) {
return is_array($value) ? array_map($strip_slashes_deep, $value) : stripslashes($value);
};
$_GET = array_map($strip_slashes_deep, $_GET);
$_POST = array_map($strip_slashes_deep, $_POST);
$_COOKIE = array_map($strip_slashes_deep, $_COOKIE);
}
?>
Run Code Online (Sandbox Code Playgroud)
<?php
echo "Hello " . htmlspecialchars($_GET['name']);
?>
Run Code Online (Sandbox Code Playgroud)
另一种检索此类输入值的推荐方法是filter_*函数.示例相当于上面的代码段,但无论magic_quotes_gpc设置如何都有效:
<?php
echo filter_input(INPUT_GET, 'name', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
?>
Run Code Online (Sandbox Code Playgroud)
相关文档: