Foros del Web » Programando para Internet » PHP »

Restringir esiquetas de estilo que se pueden enviar por formulario

Estas en el tema de Restringir esiquetas de estilo que se pueden enviar por formulario en el foro de PHP en Foros del Web. Saludos. En un formulario quiero que los usuarios puedan dar algo de formato al texto que envíen desde un textarea, pero de forma limitada. He ...
  #1 (permalink)  
Antiguo 17/08/2011, 12:58
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Restringir esiquetas de estilo que se pueden enviar por formulario

Saludos.

En un formulario quiero que los usuarios puedan dar algo de formato al texto que envíen desde un textarea, pero de forma limitada.

He añadido la función strip_tags, que elimina todas las etiquetas HTML excepto las que yo le he indicado. El problema es que esto sirve de poco si se puede añadir en las etiquetas style="el estilo que les de la gana".

Hay alguna forma de limitar los atributos de estilo que puedan añadir de esta manera?

Gracias!
  #2 (permalink)  
Antiguo 17/08/2011, 13:04
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Restringir esiquetas de estilo que se pueden enviar por formulario

con expresiones regulares detecta el inicio de un style="... hasta su fin ...."
en el php.net hay mucha info
  #3 (permalink)  
Antiguo 17/08/2011, 13:28
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Restringir esiquetas de estilo que se pueden enviar por formulario

Ya veo....
Apenas me estoy iniciando con PHP y no conocía las expresiones regulares.
Ya estoy mirando información sobre ellas, a ver si consigo lo que quiero, y si tengo problemas comento.
Muchas gracias
  #4 (permalink)  
Antiguo 17/08/2011, 18:17
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Restringir esiquetas de estilo que se pueden enviar por formulario

He conseguido hacerlo.
He utilizado la función preg_replace_callback para buscar el patrón style="loquesea" y sustituirlo por la misma cadena pero dejando solo los atributos "autorizados".
Así:

Código PHP:
Ver original
  1. $texto = preg_replace_callback ("/(style.*=.*\".*\"|style.*=.*'.*')/i","limpia_estilos",$texto);

Antes he definido la función limpia_estilos, que separa todos los atributos contenidos de estilo y vuelve a colocarlos sólo si están autorizados.

Código PHP:
Ver original
  1. function limpia_estilos ($cadena) {
  2.  
  3.     $contenido_estilos = explode ('"',$cadena[0]);
  4.     $contenido_estilos_separado = explode (';', $contenido_estilos [1]);
  5.     $salida = "style=\"";
  6.     foreach ($contenido_estilos_separado as $valor) {
  7.         if (preg_match ("/(color|margin-left|text-align|width|height)/i",$valor) > 0)
  8.             $salida .= $valor.';';
  9.     }
  10.     $salida .= '"';
  11.     return $salida;
  12. }
  #5 (permalink)  
Antiguo 18/08/2011, 06:46
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Restringir esiquetas de estilo que se pueden enviar por formulario

Buenisimo ya lo archivo en mis etiquetas del firefox!
  #6 (permalink)  
Antiguo 20/08/2011, 05:54
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Restringir esiquetas de estilo que se pueden enviar por formulario

Creo que el código no era del todo correcto, ya que el patrón de búsqueda podía llegar a incluír más elementos después del style, tal y como estaba escrito.

Así creo que es correcto, a falta de probarlo más veces:


Código PHP:
Ver original
  1. $noticia = preg_replace_callback ("/(style[[:space:]]*=[[:space:]]*\"[^\"]*\"|style[[:space:]]*=[[:space:]]*'[^']*')/i","limpia_estilos",$noticia);
  #7 (permalink)  
Antiguo 20/08/2011, 06:05
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Restringir esiquetas de estilo que se pueden enviar por formulario

Código PHP:
Ver original
  1. function limpia_estilos ($cadena) { //función callback para preg_replace_callback
  2.    
  3.         $contenido_estilos = explode ('"',$cadena[0]);
  4.         $contenido_estilos_separado = explode (';', $contenido_estilos [1]);
  5.         $salida = "style=\"";
  6.         foreach ($contenido_estilos_separado as $valor) {
  7.             $nombre_valor = explode (':',$valor);
  8.             if (preg_match ("/(color|margin-left|text-align|width|height)/i",$nombre_valor[0]) > 0)
  9.                 $salida .= $valor.';';
  10.         }
  11.         $salida .= '"';
  12.         return $salida;
  13.     }

Etiquetas: estilo, html, restringir, formulario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:18.