将字符串编码到POST数组中的精确规则/ PHP函数是什么?

时间:2010-05-26 22:08:47

标签: php html forms post

刚进入PHP Web开发。我有一个HTML表单,用户可以检查一系列动态生成的复选框,并通过POST提交。在PHP方面,我想检查点击了哪个复选框。

我有一个数组$ full_list,我正在做类似

的事情
$selected_checkboxes = array_filter($full_list, function($item) {
    array_key_exists($item, $_POST);
  }

我在列出项目时遇到问题,例如“Peanut Butter”,因为在POST数组中它被命名为“Peanut_Butter”。

在检查array_key_exists之前,我当然可以用“_”str_replace“”,但我想这里有一个更基本的编码问题;具体来说,我不确定究竟是什么层将HTML Forms(value =“Peanut Butter”)中的普通字符串转换为“Peanut_Butter”。

所以:

  • 哪个层负责此转换?是浏览器吗?
  • 确切的转换规则是什么,是否有一个PHP函数可以复制那个确切的转换?

2 个答案:

答案 0 :(得分:3)

Byron Whitlock接受的回答是错误的。 PHP确实是这里的罪魁祸首。请参阅PHP manual

  

变量名中的点和空格将转换为下划线。对于   示例<input name="a.b" />变为$_REQUEST["a_b"]

另请参阅this similar question的答案。

答案 1 :(得分:-1)

PHP不会这样做。客户端有一些东西将空格转换为下划线。

浏览器应使用等效的urlencode()对每个变量进行编码。 PHP将自动解码这些字符串,因此它对程序员来说是透明的。

修改的 javaScript中的等价物是escape()。但很可能有一些js代码手动将空格转换为下划线。