2010-06-02 8 views
0

J'ai un script api listener qui accepte les paramètres get. Mais je semble avoir des problèmes lorsque les utilisateurs ont tendance à transmettre des noms de variables de cas mixtes sur les paramètres.PHP Convertit les noms de variables en minuscules?

Par exemple:

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

Je dois mon auditeur d'être flixible de telle sorte que les noms de variables seront interprétées indépendamment de la casse ou plutôt encore tout en minuscules comme après je traite la chaîne de requête sur une certaine fonction, ils sont tous retournés en tant que variables en minuscules:

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

Quelqu'un peut-il nous éclairer à ce sujet?

* très apprécié. Merci!

Répondre

3

Cela devrait faire l'affaire:

$array_of_lower_case_strings = array_map("strtolower", array("This Will Be ALL lowercase.", ...)); 

Donc dans votre cas:

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

Une chose que je vais mentionner est que vous devriez être très prudent avec extract car elle pourrait être exploitée pour permettre à des variables inattendues d'être injectées dans votre PHP.

+0

génial! ça l'a vraiment fait! merci! ü – VeeBee

1

Appliquer à vos variables globales ($ _GET, $ _POST) si nécessaire:

par exemple setLowerCaseVars($_GET); dans votre cas

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

Edit: Notez que je préfère cela à l'aide array_combine car il ne remplace pas les cas où la variable minuscule est déjà défini.

+0

L'une des valeurs doit être "écrasée", vous avez simplement choisi d'enlever tout le monde après le premier, au lieu de tout le monde avant le dernier. La valeur par défaut de $ _GET de PHP est "last one". Par exemple? Test = 1 & test = 2 $ _GET ["test"] === 2. –

+0

C'est vrai; cette fonction ne devrait la conserver que dans le cas de '? test = 1 & TEST = 1'; néanmoins, je ne l'ai pas testé, donc je ne suis pas certain du comportement dans ce cas. – phsource

Questions connexes