PHP是否将变量名转换为小写?

PHP是否将变量名转换为小写?,php,Php,我有一个api侦听器脚本,它接受get参数。但当用户倾向于在参数上传递大小写混合的变量名时,我似乎遇到了问题 例如: http://mylistenerurl.com?paramName1=Hello&paramname2=World 我需要我的监听器是灵活的,这样变量名将不区分大小写地解释,或者更确切地说,仍然全部用小写,就像我在某个函数上处理查询字符串后,它们都作为小写变量返回: extract(someFunction($_GET)); process($paramname1,

我有一个api侦听器脚本,它接受get参数。但当用户倾向于在参数上传递大小写混合的变量名时,我似乎遇到了问题

例如:

http://mylistenerurl.com?paramName1=Hello&paramname2=World
我需要我的监听器是灵活的,这样变量名将不区分大小写地解释,或者更确切地说,仍然全部用小写,就像我在某个函数上处理查询字符串后,它们都作为小写变量返回:

extract(someFunction($_GET));
process($paramname1, $paramname2);
有人能解释一下吗


*非常感谢。谢谢

这应该可以做到:

$array_of_lower_case_strings = array_map( "strtolower", array( "This Will Be ALL lowercase.", ... ) );
因此,在你的情况下:

$get_with_lowercase_keys = array_combine(
    array_map( "strtolower", array_keys( $_GET ) ),
    array_values( $_GET )
);

我要提到的一件事是,您应该非常小心使用
提取
,因为它可能被利用来允许将意外变量注入到您的PHP中。

这应该可以做到:

$array_of_lower_case_strings = array_map( "strtolower", array( "This Will Be ALL lowercase.", ... ) );
因此,在你的情况下:

$get_with_lowercase_keys = array_combine(
    array_map( "strtolower", array_keys( $_GET ) ),
    array_values( $_GET )
);

我要提到的一件事是,您应该非常小心使用
提取
,因为它可能被用来允许将意外变量注入PHP。

在必要时应用于全局变量($\u GET,$\u POST):

e、 g.
setLowerCaseVars($\u-GET)在您的情况下

function setLowerCaseVars(&$global_var) {
    foreach ($global_var as $key => &$value) {
        if (!isset($global_var[strtolower($key)])) {
            $global_var[strtolower($key)] = $value;
        }
    }
}

编辑:请注意,我更喜欢使用array\u combine,因为它不会覆盖已设置小写变量的情况。

必要时应用于全局变量($\u GET,$\u POST):

e、 g.
setLowerCaseVars($\u-GET)在您的情况下

function setLowerCaseVars(&$global_var) {
    foreach ($global_var as $key => &$value) {
        if (!isset($global_var[strtolower($key)])) {
            $global_var[strtolower($key)] = $value;
        }
    }
}

编辑:请注意,我更喜欢使用array_combine,因为它不会覆盖已设置小写变量的情况。

其中一个值必须“覆盖”,您只是选择删除第一个值之后的所有人,而不是最后一个值之前的所有人。PHP的$\u GET默认为“最后一站”。例如?test=1&test=2$_GET[“test”]==2。这是真的;此功能应仅在
?test=1和test=1
的情况下保留;尽管如此,我还没有测试它,所以我不确定这种情况下的行为。其中一个值必须被“覆盖”,您只是选择在第一个值之后删除所有人,而不是在最后一个值之前删除所有人。PHP的$\u GET默认为“最后一站”。例如?test=1&test=2$_GET[“test”]==2。这是真的;此功能应仅在
?test=1和test=1
的情况下保留;尽管如此,我还没有测试它,所以我不确定这种情况下的行为。