PHP 7.2.0起each()函数已废弃,如何修改代码替代该函数?
解决PHP each()函数废弃后的代码替换问题
嘿,我来帮你搞定这个each()函数废弃的问题!你尝试用foreach替代each()的思路完全是对的,但为啥没生效?大概率是因为你还在使用过时的$HTTP_POST_VARS超全局变量——这个变量在PHP新版本里已经不推荐使用,甚至可能默认被禁用了。
正确的修改步骤:
- 第一步:把
$HTTP_POST_VARS替换成官方推荐的$_POST超全局变量,这是PHP处理POST数据的标准方式,兼容性更好。 - 第二步:保留你用foreach替代each()的写法,这是废弃each()后的标准替代方案。
- 第三步:一定要加上HTML转义处理,避免XSS安全漏洞——直接输出用户提交的内容是很危险的,用
htmlspecialchars()对$key和$val进行转义。
修改后的完整代码:
if (!empty($_POST)) { foreach ($_POST as $key => $val) { $safeKey = htmlspecialchars($key, ENT_QUOTES); $safeVal = htmlspecialchars($val, ENT_QUOTES); print "<input type=\"hidden\" name=\"$safeKey\" value=\"$safeVal\">\n"; } }
额外说明:
- 用
!empty($_POST)替代count($_POST)更简洁,而且能准确判断是否有POST数据。 ENT_QUOTES参数确保单引号和双引号都被转义,适配你HTML里的双引号属性写法。$HTTP_POST_VARS是PHP4时代的产物,现在完全可以用$_POST替代,它在所有支持PHP5及以上的环境中都能正常工作。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

