2011-12-14 16 views
6

Me di cuenta de que hay muchas cosas que puedes hacer con la función PHP filter_var que también se puede hacer con otra función.PHP cuándo usar filter_var en lugar de funciones integradas de php

Por ejemplo, los filtros FILTER_VALIDATE_REGEXP, FILTER_SANITIZE_ENCODED y muchos más también tienen sus respectivas funciones dedicadas en PHP.

¿Cuándo debo usar filter_var y cuándo debo usar las funciones de PHP? ¿Cuáles son las ventajas y desventajas?

+1

uso php_filter en cualquier momento se puede, que es construir-en (poco más rápido y que está seguro de utilizar la validación derecha), si no puede encontrar lo que necesita, a continuación, utilizar una personalizada. –

+1

No estaba hablando de funciones personalizadas, ya que la función integrada siempre será más rápida. Estaba hablando de filtros que ya tienen una alternativa nativa a la función php. – Tiddo

+0

Entiendo, pero si usa un preg_match tendrá que personalizar la expresión regular - Debería haber dicho, la expresión regular personalizada con preg_match disculpe la confusión –

Respuesta

7

La ventaja de la extensión filter es que tiene todo en un solo lugar.

Pero tiene razón, no ofrece muchas características novedosas. Puede hacer la mayoría de las cosas con funciones existentes, en particular preg_replace o preg_match en lugar de FILTER_VALIDATE_REGEXP. O encasillando, y usando el htmlspecialchars normal en lugar de la opción de filtro.

Sin embargo, hay filter_var_array, donde se hace evidente un beneficio. Puede filtrar cargas de variables por configuración. Y se puede predefinir una lista de filtros para aplicar todos a la vez:

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

Admito que es básicamente un ejemplo magic_quotes disparado, pero se obtiene la imagen. Unificación.

6

A día de hoy no he encontrado una manera más rápida (o mejor) de eliminar caracteres especiales de una cadena de utilizar filter_var

filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) 

Como muchas cosas en PHP, hay varias formas de hacer ellos. filter_var es conveniente.

+0

¿Esto se cumple para cada función filter_var que tiene otro equivalente incorporado? ¿O es esto solo para este filtro? – Tiddo

+0

Sí, bueno para las versiones relacionadas con cadenas. Echa un vistazo aquí, verás que FILTER_FLAG_STRIP_HIGH se aplica a algunos –

+0

¿Quién votaría por esto? ¿por qué? –

1

acabo de ejecutar un lado microtime referencia a lado 50 veces contra preg_match en un comunicado por if y filter_var_array validación de los mismos datos de restablecimiento exactos, aquí están los resultados microtime:

filter_var_array 
microtime: 0.000834226608276 

preg_match 
microtime: 0.000180006027222 

filter_var_array parece bastante, pero es de 4 a 8 veces más lento que preg_match así que si tienes un sitio web con mucho tráfico y prefieres el código rápido, te recomendaría preg_match.

Sin embargo, si te gusta el buen código de limpieza y no te importa cómo funciona, utiliza filter_var_array, que puede ser más manejable para aplicar filtros fáciles en muchas solicitudes de formularios y entradas.

Pero este tipo de facilidad también puede lograrse mediante la escritura de una función preg_match para diferentes escenarios, tales como el correo electrónico o alfanumérico pero tenga en cuenta la seguridad preg_match al escribir la expresión regular, por ejemplo:

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

lo haría Me gusta ver una compasión de uso de memoria en ambos también.

Esperanza esto ayuda

+0

La optimización prematura es la raíz de ..., ya sabes. –

Cuestiones relacionadas