PHP POST 变量尽管存在于 php://input
简介:
当通过 POST 请求在 PHP 中处理表单提交时,可能会遇到奇怪的行为,即 $_POST 超全局中缺少某些值,即使它们通过 php://input 出现在原始请求中。
问题描述:
提交带有嵌套字段的大型 HTML 表单时会出现此问题。尽管表单数据已发送到服务器,但某些值可能无法填充到 $_POST 中。检查 php://input 发现这些值确实包含在请求中,但似乎在 $_POST 中被截断。
原因:
该行为归因于PHP 对包含点、空格、方括号等字符的 POST 字段的修改。这些字符之前已由已弃用的 register_globals 配置处理。
解决方案:
要解决此问题,您可以采用如下解决方法:
<code class="php">// Get real POST variables function getRealPOST() { $pairs = explode("&", file_get_contents("php://input")); $vars = array(); foreach ($pairs as $pair) { $nv = explode("=", $pair); $name = urldecode($nv[0]); $value = urldecode($nv[1]); $vars[$name] = $value; } return $vars; }</code>
此函数解析 php://input 中的原始 POST 请求,并使用原始字段名称重建 POST 变量,考虑到PHP 进行的字符替换。
以上是尽管 PHP POST 变量存在于 php://input 中,但为什么 $_POST 中缺少 PHP POST 变量?的详细内容。更多信息请关注PHP中文网其他相关文章!