Начиная с PHP 7.2.0 функциональность УСТАРЕЛА, а в PHP 8.0.0 функциональность УДАЛИЛИ. Полагаться на функциональность настоятельно не рекомендуют.
Зачастую заставить работать существующее PHP-приложение в многобайтовом окружении становится трудоёмкой задачей. Причина состоит в том, что большую часть PHP-приложений написали со стандартными функциями обработки строк наподобие substr(), которые не умеют работать со строками в многобайтовых кодировках.
Модуль mbstring поддерживает механизм «перегрузки функций», который сообщает приложению о работе с многобайтовой кодировкой, без модификации кода, который отвечает за работу со строками. Например, при включении перегрузки функций вместо функции substr() вызывается функция mb_substr(). Этот механизм часто помогает переносить в многобайтовое окружение приложения, которые поддерживают только однобайтовые кодировки.
Для активации механизма перегрузки функций потребуется задать настройке
mbstring.func_overload в php.ini положительное значение,
которое представляет собой комбинацию битовых масок для определения категорий
функций, которые требуется перегружать. Число 1 перегружает функции
mail(), 2 — строковые функции, 4 — функций регулярных
выражений. Например, если значение настройки равно 7, то почтовые, строковые
и функции регулярных выражений станут перегружаться. Список перегружаемых функций
приведён ниже.
| значение настройки mbstring.func_overload | исходная функция | перегруженная функция |
|---|---|---|
| 1 | mail() | mb_send_mail() |
| 2 | strlen() | mb_strlen() |
| 2 | strpos() | mb_strpos() |
| 2 | strrpos() | mb_strrpos() |
| 2 | substr() | mb_substr() |
| 2 | strtolower() | mb_strtolower() |
| 2 | strtoupper() | mb_strtoupper() |
| 2 | stripos() | mb_stripos() |
| 2 | strripos() | mb_strripos() |
| 2 | strstr() | mb_strstr() |
| 2 | stristr() | mb_stristr() |
| 2 | strrchr() | mb_strrchr() |
| 2 | substr_count() | mb_substr_count() |
Замечание:
Не рекомендуется включать перегрузку функций в контексте каждой директории, так как добиться стабильной работы в такой конфигурации пока не получилось, а поведение приложения становится неожиданным.