2010-01-25 16 views
7

Come sapete quando le virgolette sono attive, le virgolette singole sono sfuggite nei valori e anche nelle chiavi. La maggior parte delle soluzioni per rimuovere Magic Quotes in fase di esecuzione solo valori unescape, non chiavi. Sono alla ricerca di una soluzione che unescape chiavi e valori ...PHP: come rimuovere (correttamente) le virgolette di escape negli array quando le virgolette sono ON

ho scoperto su PHP.net questo pezzo di codice:

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

Ma non mi piace "&" riferimenti e gli array come ho avuto bug come this one in passato ...

Esiste un modo "migliore" per scansionare le virgolette magiche (chiavi e valori) in fase di esecuzione rispetto a quello sopra?

+0

dare un'occhiata al riguardo, la domanda sul lato destro. – Gumbo

+0

Sì, ho fatto (e anche fatto una ricerca Web + SO prima di fare domande) ma non ho trovato nessuna soluzione che funzioni al 100% e che non usi riferimenti "&". – AlexV

risposta

7

credo che questo sia un po 'più pulito ed evita i bug di riferimento:

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

Fare lo stesso per GET e COOKIE.

+0

Dato che la funzione fornita elimina anche le barre sui tasti, questo potrebbe non rimuovere completamente le barre? –

+0

Ciò non eliminerà le barre dai tasti. –

Problemi correlati