2011-12-14 19 views
6

Ho notato che ci sono molte cose che puoi fare con la funzione PHP filter_var che può essere fatta anche con altre funzioni.PHP quando usare filter_var invece delle funzioni php integrate

Ad esempio, i filtri FILTER_VALIDATE_REGEXP, FILTER_SANITIZE_ENCODED e molti altri hanno anche le rispettive funzioni dedicate in PHP.

Quando devo usare filter_var e quando devo usare le funzioni PHP? quali sono i vantaggi e gli svantaggi?

+1

ora Utilizza php_filter è possibile, è costruire-in (po 'più veloce e si è sicuri di utilizzare la convalida a destra), se non riesci a trovare ciò che serve, quindi utilizzare uno personalizzato. –

+1

Non stavo parlando di funzioni personalizzate, dal momento che la funzione integrata sarà sempre più veloce. Stavo parlando di filtri che hanno già una funzione alternativa nativa per PHP. – Tiddo

+0

Capisco, ma se usi un preg_match dovrai personalizzare regexp - avrei dovuto dire, regexp personalizzato con preg_match mi dispiace per la confusione –

risposta

7

Il vantaggio dell'estensione filter consiste nel disporre di tutto in un'unica posizione.

Ma hai ragione, non offre molte funzionalità nuove. Potresti fare la maggior parte delle cose con le funzioni esistenti, in particolare preg_replace o preg_match anziché FILTER_VALIDATE_REGEXP. Oppure typecasting e utilizzando il normale htmlspecialchars invece dell'opzione filtro.

C'è comunque filter_var_array, in cui un vantaggio diventa evidente. È possibile filtrare carichi di variabili per configurazione. E si può predefinire un elenco di filtri da applicare tutti in una volta:

$_POST = filter_var_array($_POST, array(
    "text" => FILTER_SANITIZE_ENCODED, 
    "id" => FILTER_VALIDATE_INT, 
    "title" => FILTER_SANITIZE_ENCODED, 
)); 

Ammetto che è fondamentalmente un esempio di magic_quotes innescato, ma si ottiene l'immagine. Unificazione.

6

Fino ad oggi non ho trovato un modo più veloce (o meglio) di rimuovere i caratteri speciali da una stringa che usare filter_var

filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) 

Come molte cose in PHP, ci sono diversi modi di fare di loro. filter_var è conveniente.

+0

Tiene questo per ogni funzione filter_var che ha un altro equivalente integrato? O è solo per questo filtro? – Tiddo

+0

Sì, bene per le versioni relative alle stringhe. Dai un'occhiata qui, vedrai che FILTER_FLAG_STRIP_HIGH si applica ad alcuni –

+0

Chi voterebbe questo? perché? –

1

Ho appena eseguito un lato di riferimento microtime a fianco 50 volte contro preg_match in un if dichiarazione e filter_var_array convalidare i dati esatti stessi di reset, ecco i risultati microtime:

filter_var_array 
microtime: 0.000834226608276 

preg_match 
microtime: 0.000180006027222 

filter_var_array sembra piuttosto ma è da 4 a 8 volte più lento di preg_match quindi se si dispone di un sito Web con traffico elevato e si preferisce il codice veloce, suggerirei preg_match.

Tuttavia, se ti piace il codice pulito e non ti interessa davvero come funziona, utilizza filter_var_array che può essere più gestibile per l'applicazione di filtri facili su richieste e input di moduli.

Ma questo tipo di facilità può essere ottenuta anche scrivendo una funzione preg_match per diversi scenari come la posta elettronica o alfanumerico, ma tenere a mente preg_match sicurezza quando si scrive l'espressione regolare, ad esempio:

http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html

lo farei piace vedere una compassione nell'uso della memoria su entrambi.

Spero che questo aiuti

+0

L'ottimizzazione prematura è la radice di ..., lo sai. –

Problemi correlati