Получение текстового содержимого: функции, файлы и HTTP
Основные способы получения текста в PHP
Как безопасно извлечь часть строки в многобайтовой кодировке?
При работе с UTF-8 стандартная функция substr может исказить символы. Рекомендуется mb_substr из модуля mbstring. Она учитывает кодировку и корректно обрабатывает символы.
$text = 'Привет, мир!';
$part = mb_substr($text, 0, 6, 'UTF-8');
echo $part; // Выведет: ПриветPhp только цифры (оставить только цифры в php)
Привет
Php text get (получение текста в php)
Цель: получение подстроки с учётом мультибайтовой кодировки. Случаи использования: работа с текстами на кириллице, китайском, арабском и других языках.
Типичные ошибки:
- Забыли указать кодировку в четвёртом параметре - результат может быть некорректным.
- Функция возвращает false, если длина меньше 0 или начальная позиция выходит за пределы строки.
- Расширение mbstring не установлено на сервере - вызов приведёт к ошибке.
Как получить подстроку, если кодировка однобайтовая?
Для однобайтовых кодировок (ASCII, Windows-1251) можно использовать substr. Она работает быстрее, но не безопасна для многобайтовых.
$text = 'Hello, world!';
echo substr($text, 0, 5); // Helloподстрока строки php (поиск подстроки в строке php)
Hello
Php строки в файле (строки в файле php)
Типичные ошибки:
- Передача отрицательной длины приводит к обрезанию с конца.
- При использовании с UTF-8 возможно появление "битых" символов.
Как извлечь текст после определённого символа или слова?
Функция strstr находит первое вхождение подстроки и возвращает часть строки, начиная с этого вхождения. Параметр before_needle позволяет получить часть до подстроки.
$email = 'user@example.com';
$domain = strstr($email, '@'); // @example.com
$user = strstr($email, '@', true); // user
echo $domain . ' | ' . $user;Php preg match (функция preg_match в php)
@example.com | user
убрать теги php (удаление html-тегов в php)
Типичные ошибки:
- Если подстрока не найдена, функция возвращает false.
- Регистрозависимость: для поиска без учёта регистра используйте
stristr.
Как разбить строку на части и получить одну из них?
Функция explode разбивает строку по разделителю и возвращает массив. Доступ к нужному фрагменту - по индексу.
$data = 'яблоко,груша,слива';
$fruits = explode(',', $data);
echo $fruits[1]; // грушаPhp убрать из строки (удаление подстроки в php)
груша
Типичные ошибки:
- Если разделитель не найден, массив будет содержать один элемент - всю строку.
- Обращение к несуществующему индексу вызовет ошибку undefined offset.
Как извлечь текст, соответствующий регулярному выражению?
Функция preg_match ищет первое совпадение с регулярным выражением и возвращает его в массиве.
$html = 'Цена: 1500 руб.';
preg_match('/\d+/', $html, $matches);
echo $matches[0]; // 1500
1500
Типичные ошибки:
- Неправильный синтаксис регулярного выражения (например, пропущен разделитель).
- Функция возвращает false при ошибке, а не 0.
Как загрузить текстовое содержимое внешнего ресурса?
file_get_contents читает содержимое файла или URL в строку. Для HTTP можно передать контекст с заголовками.
$url = 'https://example.com/data.txt';
$content = file_get_contents($url);
if ($content !== false) {
echo substr($content, 0, 50);
} else {
echo 'Ошибка загрузки';
}
Содержимое файла (первые 50 символов)
Типичные ошибки:
- Не установлен allow_url_fopen для загрузки URL.
- Неверный путь к файлу или недоступный ресурс.
Как получить результат работы кода в виде строки?
Буферизация вывода с помощью ob_start и ob_get_clean позволяет перехватить весь вывод (echo, print) и сохранить его в переменную.
ob_start();
echo 'Привет, ';
echo 'мир!';
$output = ob_get_clean();
echo $output; // Привет, мир!
Привет, мир!
Типичные ошибки:
- Вложенная буферизация без согласования уровней.
- Забыли вызвать ob_end_clean/ob_get_clean, что может привести к накоплению буферов.
Расширенные примеры получения текста
Далее приведены более сложные сценарии, которые могут пригодиться в реальных проектах.
Извлечение текста между двумя маркерами с помощью preg_match
Часто требуется извлечь блок текста, окружённый определёнными тегами или строками. Регулярное выражение с захватывающей группой справляется с этой задачей.
$text = 'Привет, мир!';
preg_match('/]*>(.*?)<\/div>/s', $text, $match);
echo $match[1] ?? 'нет совпадения';
Привет, мир!
Модификатор s позволяет точке совпадать с переводом строки. Нежадный квантификатор .*? останавливается на первом закрывающем теге.
Чтение файла с контекстом и обработка ошибок
Для загрузки данных с HTTP-сервера с пользовательскими заголовками используется stream_context_create.
Пример $opts = [
'http' => [
'method' => 'GET',
'header' => "User-Agent: MyApp\r\n"
]
];
$context = stream_context_create($opts);
$content = @file_get_contents('https://api.example.com/data.json', false, $context);
if ($content === false) {
$error = error_get_last();
echo 'Ошибка: ' . $error['message'];
} else {
echo 'Получено ' . strlen($content) . ' байт';
}
Получено 1234 байт
Знак @ подавляет ошибки, а error_get_last позволяет получить сообщение об ошибке.
Разбор строки запроса (query string)
Функция parse_str преобразует строку вида key=value&key2=value2 в переменные.
Пример $query = 'name=Иван&age=30&city=Москва';
parse_str($query, $result);
echo $result['name'] . ', ' . $result['age'] . ' лет';
Иван, 30 лет
Результат помещается во второй параметр как массив. Старая версия без второго параметра создавала переменные в глобальной области, что не рекомендуется.
Буферизация с callback и изменением содержимого
Можно передать коллбэк в ob_start, который будет обрабатывать вывод перед его сохранением.
Пример ob_start(function($buffer) {
return strtoupper($buffer);
});
echo 'Hello, World!';
$output = ob_get_clean();
echo $output; // HELLO, WORLD!
HELLO, WORLD!
Коллбэк вызывается при сбросе буфера. Это удобно для автоматической обработки вывода (например, минификации).
Использование mb_substr с отрицательным параметром length
Отрицательная длина в mb_substr позволяет извлечь конец строки.
Пример $text = 'abcdefgh';
echo mb_substr($text, -3); // fgh
echo mb_substr($text, 2, -2); // cdef
fghcdef
Первый пример: извлечь последние 3 символа. Второй: извлечь, начиная с позиции 2 и до -2 (т.е. отбросить последние 2).
Получение текста из POST-запроса с проверкой существования
Для обработки форм используется суперглобальный массив $_POST. Всегда проверяют, установлен ли ключ.
Пример if (isset($_POST['username'])) {
$username = trim($_POST['username']);
echo 'Привет, ' . htmlspecialchars($username);
} else {
echo 'Поле username не передано';
}
Привет, Иван
Функция htmlspecialchars защищает от XSS. trim удаляет лишние пробелы.