Hace unos meses pedí ayuda con un asunto similar, y como la respuesta fue rápida y satisfactoria, vuelvo con más dudas.

Me encuentro con la necesidad de eliminar una parte de una cadena de caracteres, por el uso de HTML en mi web, que es similar a un foro donde la gente puede postear mensajes con dicho formato.
Me vendría bien recomendaciones de cómo filtrar el código HTML para que no pueda ser explotado por atacantes... Lo que hacía antes era eliminar las etiquetas <SCRIPT></SCRIPT> y su contenido, pero eso no basta... Si alguien quiere subir una imagen con posición absoluta, podría ser tan grande que taparía toda la pantalla y sería imposible de eliminar por el administrador. Solo podría hacerlo yo desde la base de datos.
El código sería el siguiente:
Código:
Entonces utilizo el siguiente algoritmo para eliminar la parte style dentro de la etiqueta img:<img src = "imagen.jpg" alt = "imagen gigante" style = "position: absolute; left: 0px; top: 0px;" border = "0" height = "2000" width = "2000" />
preg_replace('/(<img[^>]*)style*.=*.(\'|").*(\'|")/si', '\\1', $cadena);
Le di la posibilidad de comillas simples y comillas dobles (ya que creo que style no funciona sin encomillado). La "s" por si hay salto de línea, y la "i" para que sea case insensitive.
Me da el siguiente resultado:
Código:
Mi problema es que no domino todavía muy bien las expresiones regulares... Eliminó todo lo que viene después de style, incluyendo border, height y width. Y eso no debería hacerlo.<img src = "imagen.jpg" alt = "imagen gigante" />
¿Cuál es el código que debo implementar realmente?
Muchas gracias!