Ubuntu Apache环境下PHP7.0中$_POST变量点转下划线问题咨询
解决POST变量中点号被转为下划线的问题
首先得说清楚:PHP默认会把POST/GET请求参数名里的点号(.)、空格这类非字母数字字符自动转换成下划线(_),这是PHP的历史遗留行为——早年PHP变量名不允许带点号,所以内核自动做了这个转换,和你当前php.ini里的register_argc_argv、register_globals这些配置没啥关系。
要让参数名保留wefwe.wf这种带点号的格式,你得绕过$_POST数组,直接读取原始的POST请求数据,具体方法如下:
方法1:读取原始POST数据并解析
PHP提供了php://input这个内置流,用来获取未经内核处理的原始POST内容,你可以自己把它解析成数组:
针对普通表单(application/x-www-form-urlencoded格式,默认的表单提交格式)
// 获取原始的POST请求内容 $rawPost = file_get_contents('php://input'); // 把原始数据解析成关联数组 parse_str($rawPost, $postData); // 现在就能直接访问带点号的参数了 var_dump($postData['wefwe.wf']);
针对带文件上传的表单(multipart/form-data格式)
这种情况的原始数据结构更复杂,包含分隔符和文件内容,手动解析会比较麻烦。如果你的场景只是处理普通文本参数,建议优先用上面的普通表单格式;如果必须用multipart/form-data,可以考虑手动解析原始数据或者使用成熟的第三方解析库。
额外提醒:关于你的php.ini配置
虽然和当前问题无关,但还是得提一句:
register_globals在PHP5.3就被废弃,PHP7.0已经彻底移除,开启它会带来严重的安全风险,建议马上关掉。magic_quotes_gpc同样在PHP5.3废弃、PHP7.0移除,开启它会自动给字符串添加转义符,导致数据处理混乱,也建议关闭。
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

