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