Php 为什么$u POST中的字符串不能包含点&引用;?
基本上,标题说的就是这些。我的页面上有一个隐藏的输入,我想将名称设置为“some.major.uber.setting” 例如:Php 为什么$u POST中的字符串不能包含点&引用;?,php,post,Php,Post,基本上,标题说的就是这些。我的页面上有一个隐藏的输入,我想将名称设置为“some.major.uber.setting” 例如: 当我查看$u POST数据时,它包含“一些主要的uber设置”。有人能解释一下这种行为吗?这很可能是《时代》杂志上的一篇文章$\u GET/$\u POST变量被转换为标准变量($\u GET['foo']变成了$foo)。变量名不能包含点,因此它们在内部进行了转换。其记录如下: 变量名中的点和空格转换为下划线 这是从10多年前的第一次世界大战开始的 它有一个评论:
当我查看$u POST数据时,它包含“一些主要的uber设置”。有人能解释一下这种行为吗?这很可能是《时代》杂志上的一篇文章<代码>$\u GET/
$\u POST
变量被转换为标准变量($\u GET['foo']
变成了$foo
)。变量名不能包含点,因此它们在内部进行了转换。其记录如下:
变量名中的点和空格转换为下划线
这是从10多年前的第一次世界大战开始的 它有一个评论: /*确保变量名中没有空格或点(不是二进制安全的)*/ 我不知道为什么它不是“二进制安全的”。。。你得问问泽夫
当前链接:正如我在另一个答案中提到的,这是修复这种不幸行为的函数
function fix(&$target, $source, $discard = true) {
if ($discard)
$target = array();
$source = preg_replace_callback(
'/(^|(?<=&))[^=[&]+/',
function($key) { return bin2hex(urldecode($key[0])); },
$source
);
parse_str($source, $post);
foreach($post as $key => $val)
$target[ hex2bin($key) ] = $val;
}
OP知道这一点——这是问题的一部分,即“为什么?”只是为了澄清,我已经将register_global设置为Off,这就是为什么我说它是一个遗物。php内核在默认情况下用下划线替换点。这种行为必须是在register_globals中引入的,并且在删除它之后保持不变(或者至少在默认情况下禁用它)。为什么不呢
是一个PHP操作符。
fix($_POST, file_get_contents('php://input'));