当$ position中的字符不存在时,PHP认为null为0。
$ statusentery = $ _POST [status];
$ position = strpos($ statusentery,"<");if($ position == 0){
echo"抱歉,出于安全考虑,我们不这样做 允许使用<&#;;等字符;
退出;
}
例如,如果$ statusentery等于"你好",它会返回"抱歉,出于安全考虑,我们不允许使用<"等字符。 (意外)
如果$ statusentery等于" Howdy那里<"它将返回空白(预期)。
如何使它工作,以便当我进入"你好"时,它没有做if循环,但当我进入"<你在那里>",它做了if循环?
答案 0 :(得分:2)
因为0在PHP中可能意味着“假”,所以当$ post不存在时,$ post将为false。所以你需要使用以下内容:
if ($position === 0){
在PHP中使用三重等号验证比较的值是否具有相同的数据类型。可以在此处找到更多信息:http://php.net/manual/en/language.operators.comparison.php
答案 1 :(得分:2)
来自:http://php.net/manual/es/function.strpos.php
警告
因为strpos可能返回FALSE(子字符串缺席)或0(子字符串 在字符串的开头),严格的与松散的等价运算符必须是 非常小心地使用。
要知道子字符串不存在,您必须使用:
=== FALSE
要知道存在子串(在包括0的任何位置),你 可以使用以下任何一种:
!== FALSE(推荐)
-1(注意:或大于任何负数)
要知道子字符串位于字符串的开头,您必须使用:
=== 0
要知道子字符串在开头以外的任何位置,你 可以使用以下任何一个:
0(推荐)!= 0(注意:但不是!== 0也等于FALSE)!= FALSE(推荐为高度混淆)
另请注意,您无法将“”值与返回值进行比较 strpos。使用松散等价运算符(==或!=)它将返回 结果不区分子串的存在 与位置。使用严格等价运算符(===或!==) 将永远返回虚假。
所以代码必须是:
$statusentery = $_POST[status];
$position = strpos($statusentery,"<");
if ($position === 0){
echo "Sorry, for security purposes we do not allow characters such as <";
exit;
}