¿Cómo obtengo PHP strip_tags para eliminar etiquetas HTML y Script pero no XML?

Estaba usando la función php strip_tags() para eliminar las etiquetas html de la entrada de mi área de texto y para eliminar las etiquetas <script> para ayudar a protegerme contra los ataques de secuencias de comandos.

De todos modos, muchas veces el usuario necesitará ingresar etiquetas XML que no se conocen de antemano. Sin embargo, mi función strip_tags también está eliminando estas etiquetas xml benignas, lo cual no es aceptable.

Además, a veces pongo filename.<fecha>.png (tuve que agregar un espacio allí porque StackOverflow también lo eliminó) para indicar partes variables de un nombre de archivo o ruta. En este caso, termino con filename..png después de ejecutar strip_tags.

Cualquier ayuda sería muy apreciada.

preguntado el 03 de mayo de 12 a las 18:05

dado que xml también usa etiquetas, no puede. además, básicamente anularía el propósito de las etiquetas de cadena, ya que aún puede incluir javascript en cualquier etiqueta desconocida. -

3 Respuestas

strip_tags() se define como la eliminación de todas las etiquetas HTML/XML (aparte de las etiquetas individuales especificadas en el segundo argumento). No hay distinción entre los dos tipos de etiquetas, ni entre eso y <date> utilizado como marcador de posición; los tres parecen etiquetas para strip_tags(), por lo que los elimina.

contestado el 03 de mayo de 12 a las 19:05

No es posible hacer strip_tags no eliminar etiquetas desconocidas. Es posible que desee mirar DOMDocumento por una alternativa viable.

contestado el 03 de mayo de 12 a las 19:05

$s = preg_replace("/<\?xml(.*?)\?>/i", "<xmlDeclaration$1>", $s);
$s = strip_tags($s, '<xmlDeclaration><' . implode('><', $allowedTags) . '>');
$s = preg_replace("/<xmlDeclaration(.*?)>/i", "<?xml$1?>", $s);

respondido 20 mar '19, 19:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.