我正在为某人开发一个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
答案 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);
现在再次运作。