W3docs

fgetss()

La función fgetss() leía una línea de un archivo y eliminaba las etiquetas HTML o PHP. Fue eliminada en PHP 8.0. Conoce el reemplazo moderno.

¿Qué es la función fgetss()?

Importante: fgetss() fue obsoleta en PHP 7.3 y eliminada en PHP 8.0. Producirá un error fatal (Call to undefined function fgetss()) en cualquier versión moderna de PHP. Esta página documenta lo que hacía y muestra el reemplazo compatible — fgets() combinado con strip_tags() — para que puedas leer y migrar código heredado.

La función fgetss() (abreviatura de "file get string, strip") leía una sola línea de un archivo abierto y eliminaba cualquier etiqueta HTML y PHP de dicha línea antes de devolverla. Se comportaba exactamente como fgets() — leyendo hasta una nueva línea, la longitud indicada o el final del archivo — con un paso adicional: las etiquetas se eliminaban al salir.

Era esencialmente un atajo para strip_tags(fgets($handle)), que es precisamente la razón por la que PHP lo eliminó: el mismo resultado es una composición obvia de dos funciones bien entendidas, por lo que una función dedicada aportaba poco valor y era fácil de usar incorrectamente por seguridad.

Esta era su sintaxis:

La sintaxis PHP de fgetss()

fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false
ParámetroDescripción
handleUn puntero de archivo devuelto por fopen(). Obligatorio.
lengthOpcional. El número máximo de bytes a leer. La lectura se detiene en esta longitud, una nueva línea o EOF — lo que ocurra primero. Omítelo para leer toda la línea.
allowable_tagsOpcional. Un string de etiquetas que no deben eliminarse, p. ej. "<b><i>".

Valor de retorno: la siguiente línea con las etiquetas eliminadas, o false cuando se alcanza el final del archivo o en caso de error.

Un error común era asumir que fgetss() saneaba la entrada de forma segura. Solo eliminaba etiquetas mediante un analizador simple — nunca neutralizaba atributos como onclick= o URLs con javascript:. Para un escapado de salida real, utiliza htmlspecialchars(), no la eliminación de etiquetas.

¿Cómo leer y eliminar etiquetas en PHP?

Usar la función fgetss() era similar a usar la función fgets(). Estos son los pasos a seguir:

  1. Abre el archivo usando la función fopen().
  2. Usa la función fgets() para leer una línea del archivo, luego aplica strip_tags() para eliminar cualquier etiqueta.
  3. Cierra el archivo usando la función fclose().

Aquí hay un ejemplo completo y autónomo. Escribe un pequeño archivo HTML y luego lo lee línea por línea con fgets(), eliminando las etiquetas de cada línea:

¿Cómo usar fgets() y strip_tags()?

<?php

// Create a sample file containing HTML so the example runs on its own
file_put_contents("demo.txt", "<h1>Hello</h1>\n<p>World</p>\n");

$file = fopen("demo.txt", "r");

// Loop until fgets() returns false (end of file)
while (($line = fgets($file)) !== false) {
    // Remove HTML/PHP tags from the line before printing
    echo strip_tags($line);
}

fclose($file);

Salida:

Hello
World

Algunas cosas a tener en cuenta sobre este idioma:

  • Comprueba el valor de retorno, no feof(). Leer con while (($line = fgets($file)) !== false) es más robusto que while (!feof($file)), porque feof() solo se vuelve true después de una lectura fallida — el bucle anterior puede procesar una lectura final vacía. Usar una comparación estricta !== false también evita tratar una línea legítima como "0" como el final del archivo.
  • Conserva algunas etiquetas. fgetss() aceptaba un argumento allowable_tags; strip_tags() también lo hace, por lo que la migración es directa: strip_tags($line, "<b><i>") conserva <b> e <i> mientras elimina todo lo demás.
  • Eliminar etiquetas no es sanear. Si estás renderizando contenido de archivo no confiable en un navegador, escápalo con htmlspecialchars() en lugar de (o además de) eliminar etiquetas.

Cuando hayas terminado de leer, siempre libera el manejador con fclose().

Conclusión

La función fgetss() está obsoleta: fue declarada obsoleta en PHP 7.3 y eliminada en PHP 8.0, por lo que no debe usarse en código nuevo. Para leer un archivo línea por línea mientras se eliminan etiquetas HTML o PHP, combina fgets() con strip_tags() — pasa un argumento allowable_tags si necesitas conservar etiquetas específicas. Para una seguridad de salida genuina, usa htmlspecialchars(). Para profundizar en E/S de archivos, consulta fopen(), feof() y fclose().

Práctica

Práctica
¿Qué hace la función fgetss() en PHP?
¿Qué hace la función fgetss() en PHP?
Was this page helpful?