2010-01-25 7 views
7

Comme vous le savez, lorsque les guillemets magiques sont activés, les guillemets simples sont omis dans les valeurs et également dans les clés. La plupart des solutions pour supprimer Magic Quotes lors de l'exécution ne sont que des valeurs d'échappement, pas des clés. Je cherche une solution qui Unescape clés et des valeurs ...PHP: comment supprimer (correctement) les guillemets échappés dans les tableaux lorsque les guillemets magiques sont activés

J'ai trouvé sur PHP.net ce morceau de code:

$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); 
while (list($key, $val) = each($process)) 
{ 
    foreach ($val as $k => $v) 
    { 
     unset($process[$key][$k]); 
     if (is_array($v)) 
     { 
      $process[$key][stripslashes($k)] = $v; 
      $process[] = &$process[$key][stripslashes($k)]; 
     } 
     else 
     { 
      $process[$key][stripslashes($k)] = stripslashes($v); 
     } 
    } 
} 
unset($process); 

Mais je n'aime pas les références et les tableaux « & » comme j'ai eu des bugs comme this one dans le passé ...

Existe-t-il un "meilleur" moyen de désenchanter Magic Quotes (clés et valeurs) à l'exécution que celui ci-dessus?

+0

un coup d'oeil à la question connexe sur le côté droit. – Gumbo

+0

Ouais je l'ai fait (et même fait une recherche Web + SO avant de poser une question) mais je n'ai trouvé aucune solution qui fonctionne à 100% et qui n'utilise pas de références "&". – AlexV

Répondre

7

Je pense que cela est un peu plus propre et d'éviter les bugs de référence:

function unMagicQuotify($ar) { 
    $fixed = array(); 
    foreach ($ar as $key=>$val) { 
    if (is_array($val)) { 
     $fixed[stripslashes($key)] = unMagicQuotify($val); 
    } else { 
     $fixed[stripslashes($key)] = stripslashes($val); 
    } 
    } 
    return $fixed; 
} 

$process = array($_GET,$_POST,$_COOKIE,$_REQUEST); 
$fixed = array(); 
foreach ($process as $index=>$glob) { 
    $fixed[$index] = unMagicQuotify($glob); 
} 
list($_GET,$_POST,$_COOKIE,$_REQUEST) = $fixed; 
-1
array_walk_recursive($_POST, 'stripslashes'); 

Faites de même pour GET et COOKIE.

+0

Étant donné que la fonction fournie supprime également les barres obliques sur les touches, cela ne peut-il pas supprimer complètement les barres obliques? –

+0

Cela ne supprimera pas les barres obliques des touches. –

Questions connexes