2010-01-25 14 views
7

Como sabes cuando las cotizaciones mágicas están activadas, las comillas simples se escapan en valores y también en las claves. La mayoría de las soluciones para eliminar Magic Quotes en tiempo de ejecución solo liberan valores, no claves. Estoy buscando una solución que unescape claves y valores ...PHP: cómo (correctamente) eliminar las comillas que se han escapado en las matrices cuando las cotizaciones mágicas están activadas

descubrí en PHP.net este pedazo de código:

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

Pero no me gusta "&" referencias y matrices como obtuve errores como this one en el pasado ...

¿Hay alguna forma "mejor" de deshacer cálculos mágicos (claves y valores) en tiempo de ejecución que el anterior?

+0

echar un vistazo a la pregunta relacionada en el lado derecho. – Gumbo

+0

Sí, lo hice (e incluso hice una búsqueda Web + SO antes de hacer una pregunta) pero no he encontrado ninguna solución que funcione al 100% y que no utilice referencias "&". – AlexV

Respuesta

7

creo que esto es un poco más limpio y evita errores de referencia:

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

Haga lo mismo con GET y COOKIE.

+0

Dado que la función proporcionada también desgarra barras en las teclas, ¿podría esto no eliminar por completo las barras oblicuas? –

+0

Esto no quitará barras de las teclas. –

Cuestiones relacionadas