PHP - 字符串和整数

时间:2013-01-22 12:49:10

标签: php

我的网站使用PHP来检查用户使用“get”方法提交的值是否为某个整数。代码是

的代码
if ($_GET['input']==2) { ... }

但是我最近发现,如果用户输入2a2two甚至2omdodonsos之类的内容,PHP仍会将其视为值2。但是,如果用户输入23eee23twenty23ofnofnonf,则不会将其视为2。为什么会这样?将使用此代码:

 if ($_GET['input']="2") { ... }

解决问题?

3 个答案:

答案 0 :(得分:2)

您可以(并且应该)使用input filtering来清除错误的输入:

if (is_null($input = filter_input(INPUT_GET, 'input', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) {
    // an entry that was not an integer
} elseif ($input === 2) {
    // input was 2
}

另请参阅:filter_input()

答案 1 :(得分:1)

要解释原因,请阅读type juggling上的文档。

解决方案是类型安全比较(===

$_GET['input'] === '2'

答案 2 :(得分:0)

您可以检查GET值是否为数字,然后将其与数字2进行比较:

if (is_numeric($_GET['input']) ) {
    switch($_GET['input']) {
      case 1:
      case 2:
       // write your code here
      break;
      default:
       //Default option
     }
 }

或者直接使用===比较运算符@fab建议。

http://php.net/manual/en/language.operators.comparison.php