
Se state utilizzando PEAR::DB come libreria per accedere ad un database forse vi sarà capitato di avere problemi con i caratteri di escape memorizzati nel database.
Cosa succede?
Inserisco i dati (usando sempre la libreria PEAR::DB) con il metodo $db->autoExecute(), così facendo ottengo l’aggiunta dei caratteri di escape in automatico… comodissimo…
Recupero i dati utilizzando o la funzione $db->query($sql) o $stm = $db->prepare($sql) e $db->execute($stm,$data) ma ottengo come risultato le stringhe con i caratteri di escape, quindi nella visualizzazione compariranno anche tutti i backslash, aggiunti in automatico, ma che non sono stati tolti al momento del recupero.
Perchè la libreria ha questo comportamento?
Non riesco a capire il perchè, un motivo potrebbe essere quello di dover riutilizzare i dati contenuti, non sò per cosa… ma così si hanno i dati già con i caratteri di escape e quindi abbiamo il codice immune da qualche attacco di “code injection“… (non chiedetemi quali?!).
E allora come risolvo il problema?
Per ora (continuerò a cercare il motivo del perchè non viene fatto in automatico) risolvo il problema utilizzando questa funzioncina, trovata su un forum.
function remove_mq($array){
foreach($array as $key => $value){
if(is_array($value)){
$array[$key] = remove_mq($value); // run function again
} else{
$array[$key] = stripslashes($value); // strip slashes
}
}
return $array; // return the array
}
prende in input un array ed effettua una scansione ricorsiva del contenuto effettuando ad ogni campo lafunzione stripslash() che ha il compito di rimuovere tutti i caratteri di escape.
Per ora questa è la soluzione che ho adottato, ma cercherò di capire perchè non viene fatto in automatico, oppure come si può dire alla libreria PEAR:DB di farlo.
Se qualche anima pia legge questo post e ha una soluzione milgiore mi faccia sapere.
Tags: PhpSe vuoi inserire un commento, per favore completa il form sottostante.
Il contenuto di questo sito web è pubblicato sotto una Licenza Creative Commons.