it's kinda evil and gives you tons of headache.Начиная с 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() |
Замечание:
Не рекомендуется включать перегрузку функций в контексте каждой директории, так как добиться стабильной работы в такой конфигурации пока не получилось, а поведение приложения становится неожиданным.
I took over a project with this "feature" enabled... took me a while to figure out why strings behaved non language standard. So, if you like to make grown men cry - by all means enable this deathtrap.In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.In case you need to (de)activate the overloading for a specific directory, try setting an appropriate php_admin_value in your httpd.conf, e.g.
<Directory ...>
...
php_admin_value mbstring.func_overload 7
</Directory>
I'm not 100% sure if one can rely on that, but it seems to work for me.