【问题标题】:Can a value from $_POST *not* be a string?$_POST *not* 中的值可以是字符串吗?
【发布时间】:2013-02-04 07:12:43
【问题描述】:

在 PHP 中,全局 $_POST 数组中的值可以是数组或字符串以外的其他值吗?

目标是不必检查脚本中的所有内容是否都不是数组或字符串。如果我知道变量的类型,我就不必做一些奇怪的验证。如果我期望一个字符串,我不必将所有内容都转换为字符串以确保它是一个。

【问题讨论】:

  • 还有什么?你有什么想法
  • 不要玩猜谜游戏,而是解释你提出问题的原因以及你想要达到的目标。
  • 目标是不必检查脚本中的所有内容是否都不是数组或字符串。如果我知道变量的类型,我就不必做一些奇怪的验证。
  • 您应该始终进行输入验证。

标签: php httpwebrequest request


【解决方案1】:

根据文档http://php.net/manual/en/reserved.variables.post.php

An associative array of variables passed to the current script via the HTTP POST method. 

所以发送的所有数据都在关联数组中,在键值对中。有数字(int、float 等)、字符串、数组(数字或字符串)和对象数据类型。

使用排除规则我们可以从支持的数据类型中删除Object,剩下的就是字符串、数字和数组。

现在,如果您看到表单,输入字段正在接受字符串,没有迹象表明输入字段中输入的值是数字或字符串。所以为了安全起见,所有发布的值都是字符串。元素数组也有字符串值。

当您在 $_POST 中获取值时,它只是一个数组,您可以随时覆盖它

$_POST['username'] = 1;
var_dump($_POST['username']); // int (1)

我希望这有点意义

【讨论】:

    【解决方案2】:

    你可以随意投射它^^

    intval($_POST['INTEGER']);
    or simply
     (int)$_POST['int']
    

    【讨论】:

    • 将值转换为字符串以外的其他值与不同于字符串的值不同。这并不能真正回答问题。
    【解决方案3】:
    $_POST["key"] = true;
    
    var_dump($_POST["key"]); // bool(true)
    

    但环境设置的值是字符串。

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      相关资源
      最近更新 更多