W3docs

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): string

Esto 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 es null), 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

php— editable, runs on the server

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?

php— editable, runs on the server

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>italic

Ambas 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 con strip_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.

Práctica

Práctica
¿Cuál es el propósito de la función strip_tags() en PHP?
¿Cuál es el propósito de la función strip_tags() en PHP?
Was this page helpful?