(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
grapheme_substr — Возвращает часть строки в графемных кластерах
Процедурный стиль
$string,$offset,$length = null,$locale = ""Функция возвращает часть строки. Смещение и длина измеряются в графемных кластерах.
stringВходная строка по стандарту UTF-8, часть которой требуется вернуть.
offset
Начальная позиция подстроки в графемных кластерах, а не в байтах или кодовых точках.
При передаче в параметр offset нуля или положительного значения началом подстроки станет позиция offset,
которую функция при подсчёте с нуля найдёт с начала строки string. При передаче в параметр offset
отрицательного значения началом подстроки станет позиция offset, которую функция также вычислит
в графемных кластерах, но с конца строки.
length
Длина подстроки в графемных кластерах.
Положительное значение параметра length ограничит длину подстроки;
функция вернёт подстроку меньшей длины, если количество графемных кластеров с позиции offset
до конца строки окажется меньше значения length. При отрицательном значении параметра length
функция отбросит графемные кластеры с конца строки; при отрицательном значении смещения offset
усечение выполняется после вычисления начальной позиции.
При пересечении позиций смещения offset и усечения функция вернёт пустую строку.
locale
Функция возвращает подстроку, которую извлекла из строки string, или false, если возникла ошибка.
| Версия | Описание |
|---|---|
| 8.5.0 |
Добавили необязательный параметр locale.
|
| 8.0.0 |
Функция теперь автоматически уменьшает или увеличивает значение смещения, которое выходит за пределы строки;
раньше при выходе смещения за границы строки вместо пустой строки возвращалось значение false.
|
Пример #1 Пример извлечения подстроки в графемных кластерах функцией grapheme_substr()
<?php
// Символ | Название | Кодовая точка | Форма нормализации
// å: 'LATIN SMALL LETTER A WITH RING ABOVE', U+00E5, NFD
$char_a_ring_nfd = "a\xCC\x8A";
// ö: 'LATIN SMALL LETTER O WITH DIAERESIS', U+00F6, NFD
$char_o_diaeresis_nfd = "o\xCC\x88";
echo urlencode(grapheme_substr("ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", 2, -1));Результат выполнения приведённого примера:
a%CC%8Abco%CC%88