PHP - filter_input()期望参数3为long,给定字符串

时间:2018-01-07 13:49:18

标签: php

我正在为某人开发一个PHP网站,它在我自己的网络服务器上完全可以正常工作。我把它推到了远程主机上,现在我得到了:

  

警告:filter_input()期望参数3为long,string   给定

在此代码中:

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

如果页面加载,则代码会发生这种情况:

<script type="text/javascript">

    <br />
<b>Warning</b>:  filter_input() expects parameter 3 to be long, string given in <b>/home/kraeuterelfe-de/htdocs/neueSeite/index.php</b> on line <b>68</b><br />
var page = 'home.html';    </script>

<script src="js/main.js"></script>

我不知道为什么会抛出此错误,因为FILTER_SANITIZE_FULL_SPECIAL_CHARS不是字符串。

我的本​​地网络服务器在远程网络服务器运行5.2.6

时运行PHP 7.1.1

2 个答案:

答案 0 :(得分:2)

  

我不知道为什么会抛出此错误,因为FILTER_SANITIZE_FULL_SPECIAL_CHARS不是字符串。

     

我的本​​地网络服务器运行PHP 7.1.1,而远程网络服务器运行5.2.6

根据此评论,http://php.net/manual/en/filter.filters.sanitize.php#111398,FILTER_SANITIZE_FULL_SPECIAL_CHARS已添加PHP版本5.3.3。

该函数需要一个long值作为第二个参数,但是当你在PHP 5.2.6下运行这个代码时,常量FILTER_SANITIZE_FULL_SPECIAL_CHARS还不存在,所以PHP在它遇到一个未定义的常量时会做它总是做的事情 - 它假设你实际上意味着它是一个字符串 /文本文字,包含常量名称作为文本。 (你也应该得到一个&#34;注意:使用未定义的常量FILTER_SANITIZE_FULL_SPECIAL_CHARS - 假设&#39; FILTER_SANITIZE_FULL_SPECIAL_CHARS&#39;在[...]&#34;中,至少如果你有PHP配置为显示通知好。)

该特定错误消息的解释

  

filter_input()期望参数3为long,给定字符串

正如您在自己的回答中提到的,您已经找到了解决方法/备用解决方案,所以我只是将其添加为解释。

您可能也希望使用htmlspecialchars指定charset,因为http://php.net/manual/en/function.htmlspecialchars.php

  

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

所以在5.2.6下,你可能想要指定UTF-8,假设你的app / site使用它;否则会产生一些安全隐患。

答案 1 :(得分:0)

我在php.net上找到了以下信息:

  

FILTER_SANITIZE_FULL_SPECIAL_CHARS - &gt;相当于召唤   设置了ENT_QUOTES的htmlspecialchars()。

所以我改变了

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

$page = htmlspecialchars($_GET['page'], ENT_QUOTES);

现在再次运作。