$_POST空格转换为下划线


$_POST spaces converted in underscores

我有一个HTML下拉菜单,看起来像这样

<select name='not working random test!'>
<option value='0'>Select quantity:</option>
<option value='1'>1 room</option>
<option value='2'>2 rooms</option>
</select>

是否有可能,如果我var_dump $_POST,我看到这样的东西?

["not_working_random_test!"]=>
string(1) "1"

这会给我的引擎带来一些麻烦:我希望我为选择指定的名称是相同的。为什么这种情况没有发生?

这是标准的PHP行为。来自文档:

变量名中的点和空格被转换成下划线。例如,<input name="a.b" />变成了$_REQUEST["a_b"]


PHP转换为_(下划线)的字段名字符的完整列表如下(不仅仅是点):

  • chr(32) (space)
  • chr(46) [ (dot)
  • chr(91) CC_6(右方括号)
  • chr(128) - chr(159)(各种)

如果同时存在左方括号和右方括号,则不转换它们,但$_POST元素成为数组元素。

<input name='hor[se'>
<input name='hor[se]'>

将成为:

$_POST['hor_se'];
$_POST['hor']['se'];

::引用