2010-06-02 56 views
0

我有一个api侦听器脚本,它需要获取参数。但是,当用户倾向于在参数上传递混合大小写变量名称时,我似乎遇到了问题。PHP将变量名称转换为小写?

例如:

http://mylistenerurl.com?paramName1=Hello&paramname2=World 

我需要我的听众是这样,变量名称将被解释不区分大小写或者说仍然是所有小写就像我在处理查询字符串后flixible一些函数,他们都返回作为较小的变量:

extract(someFunction($_GET)); 
process($paramname1, $paramname2); 

任何人都可以说明这一点?

*非常感谢。谢谢!

回答

3

这应该做的伎俩:

$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) 
); 

有一件事我会提的是,你应该非常小心extract,因为它可能会被利用允许将意外变量注入到PHP中。

+0

太棒了!真的做到了!谢谢!!!ü – VeeBee 2010-06-02 03:20:56

1

应用到你的全局变量($ _ GET,$ _ POST)必要时:

例如setLowerCaseVars($_GET);你的情况

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

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

+0

其中一个值必须被“覆盖”,您只需在第一个之后删除所有人,而不是在最后一个之前删除所有人。 PHP的$ _GET默认为“最后一站”。例如?test = 1&test = 2 $ _GET [“test”] === 2. – 2010-06-02 03:13:16

+0

这是真的;这个函数应该只在'test = 1&TEST = 1'的情况下保留它;尽管如此,我还没有测试过,所以我不确定在这种情况下的行为。 – phsource 2010-06-02 03:27:45