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 constrip_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ámetro | Descripción |
|---|---|
handle | Un puntero de archivo devuelto por fopen(). Obligatorio. |
length | Opcional. 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_tags | Opcional. 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 comoonclick=o URLs conjavascript:. Para un escapado de salida real, utilizahtmlspecialchars(), 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:
- Abre el archivo usando la función
fopen(). - Usa la función
fgets()para leer una línea del archivo, luego aplicastrip_tags()para eliminar cualquier etiqueta. - 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
WorldAlgunas cosas a tener en cuenta sobre este idioma:
- Comprueba el valor de retorno, no
feof(). Leer conwhile (($line = fgets($file)) !== false)es más robusto quewhile (!feof($file)), porquefeof()solo se vuelvetruedespués de una lectura fallida — el bucle anterior puede procesar una lectura final vacía. Usar una comparación estricta!== falsetambién evita tratar una línea legítima como"0"como el final del archivo. - Conserva algunas etiquetas.
fgetss()aceptaba un argumentoallowable_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().