strip_tags()
La función strip_tags() en PHP elimina etiquetas HTML y PHP de una cadena, dejando solo el contenido de texto plano.
Introducción
La función strip_tags() en PHP elimina etiquetas HTML, XML y PHP de una cadena, dejando únicamente el contenido de texto plano. Se usa habitualmente para convertir contenido enviado por el usuario o texto enriquecido en texto limpio sin etiquetas — por ejemplo, al generar un resumen breve, el cuerpo de un correo electrónico en texto plano o una versión segura de un comentario para almacenar.
Este artículo cubre la sintaxis, los parámetros requeridos y opcionales, ejemplos prácticos, la forma de array añadida en PHP 7.4, y las advertencias de seguridad importantes que debes entender antes de depender de esta función.
Comprendiendo la función strip_tags()
La función strip_tags() analiza la cadena de entrada y elimina todo lo que parezca una etiqueta HTML/XML (texto entre < y >) así como las etiquetas PHP (<?php ... ?>). El texto que se encuentra entre las etiquetas se conserva. La sintaxis es la siguiente:
La sintaxis PHP de strip_tags()
strip_tags(string $string, array|string|null $allowed_tags = null): stringEsto es lo que hace cada parámetro:
$string— la cadena de entrada de la que se eliminarán las etiquetas. Es el único parámetro requerido.$allowed_tags(opcional) — una lista de etiquetas que no deben eliminarse. Puedes pasarla como una cadena de nombres de etiquetas ("<a><b>") o, desde PHP 7.4, como un array (["a", "b"]). Cuando se omite (o esnull), se eliminan todas las etiquetas.
La función devuelve la cadena resultante con todas las etiquetas no permitidas eliminadas. Nunca modifica la cadena original.
Atención: los comentarios (
<!-- ... -->) y los bloques<?php ... ?>siempre se eliminan y no pueden añadirse a la lista de permitidos.
Ejemplo de uso
Veamos un ejemplo para entender el uso de la función strip_tags() en PHP:
Ejemplo de strip_tags() en PHP
En el ejemplo anterior, usamos la función strip_tags() para eliminar todas las etiquetas HTML y PHP de la cadena. La cadena resultante Hello WorldThis is a paragraph. se muestra en pantalla usando la instrucción echo.
Usando el parámetro $allowable_tags
Veamos otro ejemplo para entender cómo puede usarse el parámetro $allowable_tags con la función strip_tags():
¿Cómo usar strip_tags() en PHP?
En el ejemplo anterior, usamos la función strip_tags() para eliminar las etiquetas HTML y PHP de la cadena. Especificamos la etiqueta <a> como etiqueta permitida mediante el parámetro $allowed_tags. Como resultado, la función elimina las etiquetas <h1> y <p> pero conserva su contenido de texto, mientras mantiene la etiqueta <a> y su contenido intactos. La cadena resultante Hello WorldThis is a paragraph.<a href='https://www.example.com'>Example link</a> se muestra en pantalla usando la instrucción echo.
Pasar etiquetas permitidas como array (PHP 7.4+)
Desde PHP 7.4 puedes pasar las etiquetas permitidas como un array en lugar de una cadena. Esto es más fácil de leer y menos propenso a errores que construir una cadena con el estilo "<a><b>":
<?php
$str = "<p>Hi</p><b>bold</b><i>italic</i>";
// String form (any PHP version)
echo strip_tags($str, "<p><b>"); // <p>Hi</p><b>bold</b>italic
echo "\n";
// Array form (PHP 7.4 and newer) — equivalent result
echo strip_tags($str, ["p", "b"]); // <p>Hi</p><b>bold</b>italicAmbas llamadas conservan las etiquetas <p> y <b> y eliminan la etiqueta <i>, imprimiendo <p>Hi</p><b>bold</b>italic en cada línea.
Nota: strip_tags() no valida HTML. Simplemente elimina etiquetas según la lista de permitidos proporcionada, lo que puede dejar marcado malformado o etiquetas sin cerrar en la salida.
Seguridad: strip_tags() no es suficiente para detener XSS
Un error común es pensar que strip_tags() hace que la entrada del usuario sea segura para mostrar. No es así. La función solo elimina etiquetas completas — no sanea los atributos de ninguna etiqueta que permitas:
<?php
$input = '<a href="javascript:alert(1)" onclick="steal()">click me</a>';
// The <a> tag survives, attributes and all
echo strip_tags($input, "<a>");
// <a href="javascript:alert(1)" onclick="steal()">click me</a>Los atributos peligrosos href y onclick pasan directamente. Para contenido que se renderizará como HTML, usa htmlspecialchars() para escapar el texto, o un saneador HTML dedicado como HTML Purifier cuando necesites permitir cierto marcado de forma segura. Usa strip_tags() para producir texto plano, no para producir HTML seguro.
Casos de uso comunes
- Vistas previas en texto plano: genera un fragmento sin etiquetas de un artículo para resultados de búsqueda o vistas de lista.
- Cuerpos de correo electrónico en texto plano: elimina el HTML antes de enviar la alternativa en texto de un correo.
- Limpieza de la entrada del usuario que nunca debería contener marcado, como un nombre de usuario o una consulta de búsqueda.
Funciones relacionadas
htmlspecialchars()— escapa<,>,&y comillas para que el marcado se renderice como texto en lugar de ser eliminado.htmlentities()— convierte todos los caracteres aplicables en entidades HTML.trim()— elimina los espacios en blanco circundantes, frecuentemente usado junto constrip_tags()para limpiar el resultado.
Conclusión
La función strip_tags() es una herramienta sencilla para extraer texto plano de cadenas que contienen marcado HTML o PHP. Pasa una lista de permitidos (como cadena, o como array en PHP 7.4+) cuando necesites conservar etiquetas específicas, y recuerda que solo elimina etiquetas — no sanea atributos, por lo que no es un sustituto del escape de salida adecuado. Úsala para producir texto plano y recurre a htmlspecialchars() o a un saneador real cuando necesites HTML seguro.