php停止引用转义

Ami*_*nna -1 php apache

我有一个小的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服务器上运行正常.怎么解决这个问题?

Lek*_*eyn 7

将下一个代码放在一个.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)

请注意,您的代码段易受XSS攻击,因此请使用正确的转义:

<?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)

相关文档: