我有一个小的PHP代码打印欢迎消息
<?php
echo "Hello ". $_GET['name'];
?>
我已将此代码放在Godaddy服务器上托管的网站上,我发现服务器正在转发单引号和双引号。例如
http://www.example.com/test.php?name=test's
打印
Hello test\'s
但是我的PC上的apache服务器上运行的代码相同。如何解决这个问题?
答案 0 :(得分:7)
将下一个代码放在.htaccess
文件中,告知PHP不应将magic quotes添加到 G ET, P OST和 C ookie变量。
php_flag magic_quotes_gpc Off
如果您的虚拟主机不允许您更改设置,则需要使用stripslashes
功能自行删除这些引号。由于$_GET
/ $_POST
/ $_COOKIE
数组可能包含其他数组(通过使用name[full]=John Smit
等字段名称),因此需要一个递归函数来去除斜杠。例如,使用this comment中的代码段从输入中删除所有“魔术引号”:
<?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);
}
?>
请注意,您的代码段易受XSS攻击,因此请使用proper escaping:
<?php
echo "Hello " . htmlspecialchars($_GET['name']);
?>
检索此类输入值的另一种推荐方法是filter_*
函数。示例相当于上面的代码段,但无论magic_quotes_gpc
设置如何都可以使用:
<?php
echo filter_input(INPUT_GET, 'name', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
?>
相关文档:
答案 1 :(得分:4)
Godaddy显然启用了魔法引用:
if(get_magic_quotes_gpc())
echo stripslashes($_GET['name']);
else
echo $_GET['name'];
答案 2 :(得分:0)
在提交之前对您的查询字符串进行Urlencode,然后在将其写回浏览器之前使用urldecode。这将缓解任何浏览器或托管问题,是一种很好的做法。您所做的通常被认为是一个“坏主意”,因为没有编码的URL不直接支持撇号和引号。
答案 3 :(得分:0)
由于您使用的是godaddy,我建议您拨打stripslashes
:
<?php
echo "Hello ". stripslashes($_GET['name']);
?>