Получение текстового содержимого: функции, файлы и HTTP

Раздел: Основы PHP -> Обработка строк

Основные способы получения текста в 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 удаляет лишние пробелы.

Получение текста в PHP - comments

En
Php text get (php)