TigerZF
🌐Español

Capítulo 35. Zend_Filter

Tabla de contenidos

35.1. Introducción
35.1.1. ¿Qué es un filtro?
35.1.2. Uso básico de filtros
35.1.3. Uso del método estático staticFilter()
35.1.3.1. Espacios de nombres
35.1.4. Doble filtrado
35.2. Clases de filtro estándar
35.2.1. Alnum
35.2.1.1. Opciones soportadas para Zend_Filter_Alnum
35.2.1.2. Uso básico
35.2.1.3. Permitir espacios en blanco
35.2.2. Alpha
35.2.2.1. Opciones soportadas para Zend_Filter_Alpha
35.2.2.2. Uso básico
35.2.2.3. Permitir caracteres de espacio en blanco
35.2.3. BaseName
35.2.3.1. Opciones soportadas para Zend_Filter_BaseName
35.2.3.2. Uso básico
35.2.4. Boolean
35.2.4.1. Opciones soportadas para Zend_Filter_Boolean
35.2.4.2. Comportamiento por defecto de Zend_Filter_Boolean
35.2.4.3. Cambiar el comportamiento de Zend_Filter_Boolean
35.2.4.4. Booleanos localizados
35.2.4.5. Deshabilitar el casting
35.2.5. Callback
35.2.5.1. Opciones soportadas para Zend_Filter_Callback
35.2.5.2. Uso básico
35.2.5.3. Parámetros por defecto dentro de un callback
35.2.6. Compress y Decompress
35.2.6.1. Opciones soportadas para Zend_Filter_Compress y Zend_Filter_Decompress
35.2.6.2. Adaptadores de compresión soportados
35.2.6.3. Manejo genérico
35.2.6.4. Crear un archivo comprimido
35.2.6.5. Descomprimir un archivo comprimido
35.2.6.6. Adaptador Bz2
35.2.6.7. Adaptador Gz
35.2.6.8. Adaptador Lzf
35.2.6.9. Adaptador Rar
35.2.6.10. Adaptador Tar
35.2.6.11. Adaptador Zip
35.2.7. Digits
35.2.7.1. Opciones soportadas para Zend_Filter_Digits
35.2.7.2. Uso básico
35.2.8. Dir
35.2.8.1. Opciones soportadas para Zend_Filter_Dir
35.2.8.2. Uso básico
35.2.9. Encrypt y Decrypt
35.2.9.1. Opciones soportadas para Zend_Filter_Encrypt y Zend_Filter_Decrypt
35.2.9.2. Uso del adaptador
35.2.9.3. Cifrado con Mcrypt
35.2.9.4. Descifrado con Mcrypt
35.2.9.5. Cifrado con OpenSSL
35.2.9.5.1. Uso simplificado con Openssl
35.2.9.5.2. Comprimir el contenido
35.2.9.6. Descifrado con OpenSSL
35.2.10. HtmlEntities
35.2.10.1. Opciones soportadas para Zend_Filter_HtmlEntities
35.2.10.2. Uso básico
35.2.10.3. Estilo de comillas
35.2.10.4. Métodos auxiliares
35.2.11. Int
35.2.11.1. Opciones soportadas para Zend_Filter_Int
35.2.11.2. Uso básico
35.2.12. LocalizedToNormalized y NormalizedToLocalized
35.2.12.1. Opciones soportadas para Zend_Filter_LocalizedToNormalized y Zend_Filter_NormalizedToLocalized
35.2.12.2. Flujo de trabajo
35.2.12.3. Normalización de números
35.2.12.4. Normalización de fecha y hora
35.2.12.5. Localización de números
35.2.12.6. Localización de fecha y hora
35.2.13. Null
35.2.13.1. Opciones soportadas para Zend_Filter_Null
35.2.13.2. Comportamiento por defecto de Zend_Filter_Null
35.2.13.3. Cambiar el comportamiento de Zend_Filter_Null
35.2.14. PregReplace
35.2.14.1. Opciones soportadas para Zend_Filter_PregReplace
35.2.14.2. Uso básico
35.2.15. RealPath
35.2.15.1. Opciones soportadas para Zend_Filter_RealPath
35.2.15.2. Uso básico
35.2.15.3. Rutas inexistentes
35.2.16. StringToLower
35.2.16.1. Opciones soportadas para Zend_Filter_StringToLower
35.2.16.2. Uso básico
35.2.16.3. Cadenas con distintas codificaciones
35.2.17. StringToUpper
35.2.17.1. Opciones soportadas para Zend_Filter_StringToUpper
35.2.17.2. Uso básico
35.2.17.3. Cadenas con distintas codificaciones
35.2.18. StringTrim
35.2.18.1. Opciones soportadas para Zend_Filter_StringTrim
35.2.18.2. Uso básico
35.2.18.3. Comportamiento por defecto de Zend_Filter_StringTrim
35.2.19. StripNewLines
35.2.19.1. Opciones soportadas para Zend_Filter_StripNewLines
35.2.19.2. Uso básico
35.2.20. StripTags
35.2.20.1. Opciones soportadas para Zend_Filter_StripTags
35.2.20.2. Uso básico
35.2.20.3. Permitir etiquetas definidas
35.2.20.4. Permitir atributos definidos
35.3. Cadenas de filtros
35.3.1. Cambiar el orden de la cadena de filtros
35.4. Escribiendo filtros
35.5. Zend_Filter_Input
35.5.1. Declarar reglas de filtros y validadores
35.5.2. Crear el procesador de filtros y validadores
35.5.3. Obtener campos validados y otros informes
35.5.3.1. Consultar si la entrada es válida
35.5.3.2. Obtener campos no válidos, faltantes o desconocidos
35.5.3.3. Obtener campos válidos
35.5.4. Uso de metacomandos para controlar las reglas de filtros o validadores
35.5.4.1. El metacomando FIELDS
35.5.4.2. El metacomando PRESENCE
35.5.4.3. El metacomando DEFAULT_VALUE
35.5.4.4. El metacomando ALLOW_EMPTY
35.5.4.5. El metacomando BREAK_CHAIN
35.5.4.6. El metacomando MESSAGES
35.5.4.7. Uso de opciones para establecer metacomandos para todas las reglas
35.5.5. Añadir espacios de nombres de clases de filtro
35.6. Zend_Filter_Inflector
35.6.1. Operación
35.6.2. Establecer rutas a filtros alternativos
35.6.3. Establecer el objetivo del inflector
35.6.4. Reglas de inflexión
35.6.4.1. Reglas estáticas
35.6.4.2. Reglas de inflexión de filtros
35.6.4.3. Establecer muchas reglas a la vez
35.6.5. Métodos de utilidad
35.6.6. Usar Zend_Config con Zend_Filter_Inflector

35.1. Introducción

El componente Zend_Filter proporciona un conjunto de filtros de datos comúnmente necesarios. También proporciona un mecanismo simple de encadenamiento de filtros mediante el cual se pueden aplicar múltiples filtros a un único dato en un orden definido por el usuario.

35.1.1. ¿Qué es un filtro?

En el mundo físico, un filtro se utiliza típicamente para eliminar porciones no deseadas de una entrada, y la porción deseada de la entrada pasa a través como salida del filtro (por ejemplo, café). En tales escenarios, un filtro es un operador que produce un subconjunto de la entrada. Este tipo de filtrado es útil para aplicaciones web - eliminar entradas no permitidas, recortar espacios en blanco innecesarios, etc.

Esta definición básica de un filtro puede extenderse para incluir transformaciones generalizadas sobre la entrada. Una transformación común aplicada en las aplicaciones web es el escapado de entidades HTML. Por ejemplo, si un campo de formulario se rellena automáticamente con una entrada no confiable (por ejemplo, desde un navegador web), este valor debería estar libre de entidades HTML o contener solo entidades HTML escapadas, con el fin de prevenir un comportamiento no deseado y vulnerabilidades de seguridad. Para cumplir este requisito, las entidades HTML que aparezcan en la entrada deben ser eliminadas o escapadas. Por supuesto, qué enfoque es más apropiado depende de la situación. Un filtro que elimina las entidades HTML opera dentro del alcance de la primera definición de filtro - un operador que produce un subconjunto de la entrada. Un filtro que escapa las entidades HTML, sin embargo, transforma la entrada (por ejemplo, "&" se transforma en "&"). Soportar estos casos de uso para los desarrolladores web es importante, y "filtrar," en el contexto del uso de Zend_Filter, significa realizar algunas transformaciones sobre los datos de entrada.

35.1.2. Uso básico de filtros

Habiendo establecido esta definición de filtro, se proporciona la base para Zend_Filter_Interface, que requiere que un único método llamado filter() sea implementado por una clase de filtro.

A continuación se muestra un ejemplo básico del uso de un filtro sobre dos datos de entrada, los caracteres de ampersand (&) y comilla doble ("):

$htmlEntities = new Zend_Filter_HtmlEntities();

echo $htmlEntities->filter('&'); // &
echo $htmlEntities->filter('"'); // "

35.1.3. Uso del método estático staticFilter()

Si resulta inconveniente cargar una determinada clase de filtro y crear una instancia del filtro, puede utilizar el método estático Zend_Filter::filterStatic() como estilo alternativo de invocación. El primer argumento de este método es un valor de dato de entrada, que pasaría al método filter(). El segundo argumento es una cadena, que corresponde al nombre base de la clase de filtro, relativo al espacio de nombres Zend_Filter. El método staticFilter() carga automáticamente la clase, crea una instancia, y aplica el método filter() a los datos de entrada.

echo Zend_Filter::filterStatic('&', 'HtmlEntities');

También puede pasar un array de argumentos del constructor, si son necesarios para la clase de filtro.

echo Zend_Filter::filterStatic('"',
                               'HtmlEntities',
                               array('quotestyle' => ENT_QUOTES));

El uso estático puede ser conveniente para invocar un filtro de forma ad hoc, pero si necesita ejecutar un filtro para múltiples entradas, es más eficiente seguir el primer ejemplo anterior, creando una instancia del objeto filtro y llamando a su método filter().

Además, la clase Zend_Filter_Input le permite instanciar y ejecutar múltiples clases de filtros y validadores bajo demanda para procesar conjuntos de datos de entrada. Vea Zend_Filter_Input.

35.1.3.1. Espacios de nombres

Cuando trabaje con filtros propios definidos, puede pasar un cuarto parámetro a Zend_Filter::filterStatic() que es el espacio de nombres donde se puede encontrar su filtro.

echo Zend_Filter::filterStatic(
    '"',
    'MyFilter',
    array($parameters),
    array('FirstNamespace', 'SecondNamespace')
);

Zend_Filter también permite establecer espacios de nombres por defecto. Esto significa que puede establecerlos una vez en su bootstrap y no tener que darlos de nuevo en cada llamada a Zend_Filter::filterStatic(). El siguiente fragmento de código es idéntico al anterior.

Zend_Filter::setDefaultNamespaces(array('FirstNamespace', 'SecondNamespace'));
echo Zend_Filter::filterStatic('"', 'MyFilter', array($parameters));
echo Zend_Filter::filterStatic('"', 'OtherFilter', array($parameters));

Para su comodidad existen los siguientes métodos que permiten el manejo de espacios de nombres:

  • Zend_Filter::getDefaultNamespaces(): Devuelve todos los espacios de nombres por defecto establecidos como un array.

  • Zend_Filter::setDefaultNamespaces(): Establece nuevos espacios de nombres por defecto y sobrescribe cualquier valor establecido previamente. Acepta una cadena para un único espacio de nombres o un array para múltiples espacios de nombres.

  • Zend_Filter::addDefaultNamespaces(): Añade espacios de nombres adicionales a los ya establecidos. Acepta una cadena para un único espacio de nombres o un array para múltiples espacios de nombres.

  • Zend_Filter::hasDefaultNamespaces(): Devuelve TRUE cuando hay uno o más espacios de nombres por defecto establecidos, y FALSE cuando no hay ninguno establecido.

35.1.4. Doble filtrado

Cuando se utilizan dos filtros uno tras otro, hay que tener en cuenta que a menudo no es posible obtener la salida original utilizando el filtro opuesto. Tome el siguiente ejemplo:

$original = "my_original_content";

// Adjuntar un filtro
$filter   = new Zend_Filter_Word_UnderscoreToCamelCase();
$filtered = $filter->filter($original);

// Usar su opuesto
$filter2  = new Zend_Filter_Word_CamelCaseToUnderscore();
$filtered = $filter2->filter($filtered)

El ejemplo de código anterior podría dar la impresión de que se obtendrá la salida original después de aplicar el segundo filtro. Pero pensando lógicamente esto no es el caso. Después de aplicar el primer filtro my_original_content se cambiará a MyOriginalContent. Pero después de aplicar el segundo filtro el resultado es My_Original_Content.

Como puede ver, no siempre es posible obtener la salida original utilizando un filtro que parece ser el opuesto. Depende del filtro y también de la entrada dada.