Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-filter_input()要求参数3为长字符串_Php - Fatal编程技术网

PHP-filter_input()要求参数3为长字符串

PHP-filter_input()要求参数3为长字符串,php,Php,我正在为某人开发一个PHP站点,它在我自己的Web服务器上本地运行得非常好。我将其推送到远程主机,现在我得到: 警告:filter_input()要求参数3为长字符串 给定 在此代码处: <script type="text/javascript"> <?php $page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS); if (isset

我正在为某人开发一个PHP站点,它在我自己的Web服务器上本地运行得非常好。我将其推送到远程主机,现在我得到:

警告:filter_input()要求参数3为长字符串 给定

在此代码处:

<script type="text/javascript">

    <?php 
        $page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS);

        if (isset($page)) {
            echo "var page = '$page';";
        } else {
            echo "var page = 'home.html';";
        }
    ?>
</script>


我在上找到了以下信息:

过滤\u消毒\u完全\u特殊\u字符->相当于调用 设置了ENT_引号的htmlspecialchars()

所以我改变了

$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS);

现在它又起作用了

我不知道它为什么会抛出这个错误,因为FILTER\u SANITIZE\u FULL\u SPECIAL\u CHARS不是字符串

我的本地Web服务器运行PHP7.1.1,而远程Web服务器运行5.2.6

根据这条评论,在PHP版本5.3.3中添加了FILTER_SANITIZE_FULL_SPECIAL_CHARS

函数需要一个长值作为第二个参数,但在PHP 5.2.6下运行此代码时,常量FILTER\u SANITIZE\u FULL\u SPECIAL\u CHARS还不存在,因此PHP在遇到未定义的常量时会做它通常做的事情——它假设您实际上是指一个字符串/文本文本,其中包含常量名称作为文本。(您还应该得到一个“通知:使用未定义的常量FILTER_SANITIZE_FULL_SPECIAL_CHARS-假定在[…]中使用‘FILTER_SANITIZE_FULL_SPECIAL_CHARS’”,至少在您将PHP配置为显示通知的情况下是如此。)

这是对特定错误消息的解释

filter_input()要求参数3为长字符串


正如您在自己的回答中所提到的,您已经找到了一个变通方法/替代解决方案,因此我添加此项仅用于解释

不过,您可能还希望使用htmlspecialchars指定字符集,因为:

PHP5.4和5.5将使用UTF-8作为默认值。PHP的早期版本使用ISO-8859-1


因此,在5.2.6中,您可能希望指定UTF-8,假设您的应用程序/站点使用UTF-8;否则可能会有一些安全问题。

filter\u input
将返回
null
如果未设置
$\u GET['page']
,但替换行将产生
注意未定义的索引。此外,如果未定义
FILTER\u SANITIZE\u FULL\u SPECIAL\u CHARS
,PHP将其解释为具有相同值的字符串常量,同时产生
注意使用未定义的常量FILTER\u SANITIZE\u FULL\u SPECIAL\u CHARS
。检查您的
错误报告
您可能有一些隐藏的错误/漏洞。
$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$page = htmlspecialchars($_GET['page'], ENT_QUOTES);