Mb stristr: примеры (PHP)
mb_stristr(string $haystack, string $needle, bool $before_needle = false, ?string $encoding = null): string|falseФункция mb_stristr выполняет поиск первого вхождения подстроки в строке без учета регистра с поддержкой многобайтовых кодировок. Она применяется при работе с текстами на языках, использующих многобайтовые символы, таких как кириллица, иероглифы и другие. Это позволяет корректно обрабатывать строки в кодировках UTF-8, Windows-1251 и других.
Функция принимает до четырех параметров:
- haystack (обязательный) - строка, в которой выполняется поиск.
- needle (обязательный) - подстрока для поиска.
- before_needle (необязательный) - логический параметр. Если установлен в true, возвращает часть строки до первого вхождения подстроки. По умолчанию false.
- encoding (необязательный) - кодировка строки. Если не указана, используется внутренняя кодировка или кодировка, установленная функцией mb_internal_encoding().
Примеры использования
$str = 'Привет, мир!';
$search = 'МИР';
$result = mb_stristr($str, $search);
echo $result;мир!
$str = 'Пример текста';
$search = 'текста';
$result = mb_stristr($str, $search, true);
echo $result;Пример
$str = 'Строка в кодировке UTF-8';
$search = 'UTF';
$result = mb_stristr($str, $search, false, 'UTF-8');
echo $result;UTF-8
Альтернативные функции в PHP
Для работы с многобайтовыми строками существует несколько функций:
- mb_strpos - возвращает позицию первого вхождения подстроки без учета регистра. Используется, когда нужна позиция, а не часть строки.
- mb_stripos - аналог mb_strpos, но без учета регистра.
- stristr - однобайтовый аналог, работает только с ASCII. Применяется для английского текста.
- mb_strstr - многобайтовый аналог с учетом регистра.
Выбор функции зависит от необходимости учета регистра и работы с многобайтовыми строками.
Типичные ошибки
$str = 'Текст';
$search = 'текст';
$result = mb_stristr($str, $search, false, 'ASCII');
var_dump($result);bool(false)
$result = mb_stristr(12345, '3');
var_dump($result);string(3) "345"
Функция преобразует числа в строки, что может привести к неожиданным результатам.
Изменения в версиях PHP
В PHP 8 функция mb stristr стала более строгой к типам передаваемых аргументов. Ранее некорректные аргументы могли приводить к неявным преобразованиям. Также были оптимизированы алгоритмы поиска для многобайтовых кодировок. В PHP 8.3 добавлены улучшения обработки крайних случаев при работе с пустыми строками.
Расширенные примеры
function findAllOccurrences($haystack, $needle) {
$positions = [];
$offset = 0;
while (($pos = mb_stripos($haystack, $needle, $offset)) !== false) {
$positions[] = $pos;
$offset = $pos + 1;
}
return $positions;
}
$text = 'Тест тест ТЕСТ';
$result = findAllOccurrences($text, 'тест');
print_r($result);Array
(
[0] => 0
[1] => 5
[2] => 10
)$email = 'USER@EXAMPLE.COM';
$domain = mb_stristr($email, '@', false);
echo ltrim($domain, '@');EXAMPLE.COM
$text = "Первая строка\nВторая СТРОКА\nТретья строка";
$lines = explode("\n", $text);
foreach ($lines as $line) {
if (mb_stristr($line, 'СТРОКА')) {
echo $line . "\n";
}
}Вторая СТРОКА Третья строка
Аналоги в других языках
Mb stristr в Python
text = 'Пример строки'
search = 'СТРОКИ'
result = text.lower().find(search.lower())
if result != -1:
print(text[result:])строки
Mb stristr в Javascript
let str = 'Пример строки';
let search = 'СТРОКИ';
let index = str.toLowerCase().indexOf(search.toLowerCase());
if (index !== -1) {
console.log(str.substring(index));
}строки
Mb stristr в MySQL
SELECT SUBSTRING('Пример строки', LOCATE('СТРОКИ', LOWER('Пример строки')));строки
Основное отличие - в PHP функция встроена и поддерживает многобайтовость из коробки, тогда как в других языках часто требуется приведение к одному регистру.