Fgetss: примеры (PHP)
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): stringФункция fgetss является устаревшей функцией языка PHP, предназначенной для чтения строки из файла с одновременным удалением HTML и PHP тегов. Изначально она использовалась для безопасной обработки данных, полученных из внешних источников, таких как файлы или потоки.
Функция принимала три параметра:
- handle - обязательный ресурс (указатель) файла, полученный через fopen().
- length - необязательный целочисленный аргумент, задающий максимальную длину считываемой строки.
- allowable_tags - необязательный строковый параметр, позволяющий указать теги, которые не должны удаляться.
Функция возвращала строку длиной до length - 1 байт с удаленными тегами или false при ошибке или достижении конца файла.
$file = fopen('test.html', 'r');
echo fgetss($file);
fclose($file);Пример текста без тегов
$file = fopen('test.html', 'r');
echo fgetss($file, 50);
fclose($file);Фрагмент строки длиной до 49 байт
$file = fopen('test.html', 'r');
echo fgetss($file, 1024, '<strong><em>');
fclose($file);Текст с сохраненными тегами <strong> и <em>
В современных версиях PHP вместо fgetss рекомендуется использовать другие функции:
- strip_tags() - удаляет HTML и PHP теги из строки. Более универсальна, работает с любыми строками.
- fgets() с последующим применением strip_tags() - для чтения файлов построчно.
- htmlspecialchars() - преобразует специальные символы в HTML сущности, что предотвращает выполнение тегов.
- DOMDocument с фильтрацией - для сложного парсинга HTML.
Для новых проектов предпочтительнее использовать strip_tags() или htmlspecialchars() в зависимости от задачи.
Fgetss в Python
from bs4 import BeautifulSoup
import re
with open('test.html', 'r') as file:
text = file.readline()
clean_text = BeautifulSoup(text, 'html.parser').get_text()
# Или с помощью re
clean_text = re.sub(r'<[^>]*>', '', text)Текст без HTML разметки
Fgetss в Javascript
// В браузере
let text = '<p>Пример</p>';
let cleanText = text.replace(/<[^>]*>/g, '');
// В Node.js с fs
const fs = require('fs');
let fileContent = fs.readFileSync('test.html', 'utf8');
let lines = fileContent.split('\n');
let cleanLine = lines[0].replace(/<[^>]*>/g, '');Пример
Fgetss в MySQL
-- Нет прямой аналогии, но можно использовать функции для удаления тегов
-- через пользовательские функции или обработку на стороне приложения.$file = fopen('test.txt', 'r');
$line = fgetss($file); // Фатальная ошибка
fclose($file);Fatal error: Uncaught Error: Call to undefined function fgetss()
$line = fgetss(false); // Предупреждение в старых версиях PHPWarning: fgetss() expects parameter 1 to be resource, boolean given
// Файл в UTF-8 с кириллицей
$file = fopen('file.html', 'r');
echo fgetss($file); // Могут возникнуть проблемы с многобайтовыми символами
fclose($file);Часть строки может обрезаться некорректно
Функция fgetss претерпела несколько изменений:
- В PHP 7.3 функция была объявлена устаревшей (deprecated).
- В PHP 8.0 функция была полностью удалена из ядра языка.
- В ранних версиях PHP функция имела проблемы с безопасностью и некорректно обрабатывала некоторые типы тегов.
Разработчикам рекомендуется перейти на использование strip_tags() или других современных методов фильтрации.
$file = fopen('data.html', 'r');
while (!feof($file)) {
echo fgetss($file, 4096, '<a><img>');
}
fclose($file);Весь текст файла с сохранением только тегов <a> и <img>
// fgetss не сохраняла атрибуты даже разрешенных тегов
$file = fopen('test.html', 'r');
echo fgetss($file, 1024, '<a href>'); // href не сохранится
fclose($file);Ссылка будет без атрибута href
$stream = fopen('php://input', 'r');
$clean_input = fgetss($stream); // Чтение и очистка входящих данныхОчищенная строка из стандартного ввода
function modern_fgetss($handle, $length = null, $allowable_tags = '') {
$line = $length ? fgets($handle, $length) : fgets($handle);
return $line !== false ? strip_tags($line, $allowable_tags) : false;
}
$file = fopen('test.html', 'r');
echo modern_fgetss($file, 512, '<b>');
fclose($file);Текст с сохраненными тегами <b>