php停止引用转义

时间:2011-10-03 20:13:24

标签: php apache

我有一个小的PHP代码打印欢迎消息

<?php
echo "Hello ". $_GET['name'];
?>

我已将此代码放在Godaddy服务器上托管的网站上,我发现服务器正在转发单引号和双引号。例如

http://www.example.com/test.php?name=test's

打印

Hello test\'s

但是我的PC上的apache服务器上运行的代码相同。如何解决这个问题?

4 个答案:

答案 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']);
?>