Escape di unsa stringa per un database
Escape di unsa stringa per un database postato il 15/08/2010 03:25:12 nel forum programmazione, open source e hosting e modificato da valenor il 15/08/2010 03:31:28
Sto creando una funzione di escape di una stringa in modo che sia sicura per un eventuale inserimento in un DB tramite query.
PS: Considerate gli slash della sezione del preg_replace come dei backslash.
function super_escape_string ($string, $connessione) {
// Controllo se c'è connessione, altrimenti la genero
if ((isset($connessione))!== TRUE) {
$this->DB_Conn;
}
$cstring = $connessione->real_escape_string($string);
$supcstring = preg_replace("/([%;])/", "\\\\$1", $cstring);
return $supcstring;
}
La cosa che mi interessa sapere è come mai nella stringa in cui utilizzo il preg_replace sono necessari ben 4 backslash per visualizzare un back slash prima dei caratteri cercati.
Nel senso che, avendo questa stringa:
$string = " io sono un; %s ";
// per avere un backslash prima di ; e di % devo fare così
$cstring = preg_replace ( "/([;%])/", "\\\\$1", $string);
Perchè ne servono quattro?
Pagine → 1
15/08/2010 12:27:53 e modificato da vino_veritas il 15/08/2010 12:32:00
Perchè prima di passare al motore delle espressioni regolari, i pattern vengono interpretati dall'engine php stesso; in pratica, tu vuoi fare l'escape di un backslash, quindi a rigor di logica dovresti scrivere solo 2 backslash.
Ma siccome il motore php interpreta per primo le stringhe, esso toglierebbe un backslash interpretando "correttamente" il fatto che il carattere successivo al backslash debba essere interpretato dalla stringa "così com'è" (in pratica, supponendo che tu abbia passato la stringa composta da \\n, verrebbe passato al motore delle regexp il carattere di new line).
Se invece ne metti 4, di backslash, il motore php ne toglie automaticamente 2, il primo e il terzo, facendo così arrivare al motore delle espressioni regolari l'esatta sequenza di 2 backslash, che verrà interpretata come "occorrenza di un singolo backslash" (riprendendo l'esempio di prima, se fai passare \\\\n ciò che arriva al motore delle regexp è la stringa \\n, vale a dire, la sequenza backslash-n, non il carattere di new line).
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Wuthering Waves ↗
Cafuné ↗
New Orleans ↗