PHP-filter_input()要求参数3为长字符串
我正在为某人开发一个PHP站点,它在我自己的Web服务器上本地运行得非常好。我将其推送到远程主机,现在我得到: 警告: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
<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);