it's kinda evil and gives you tons of headache.
Эта функциональность объявлена УСТАРЕВШЕЙ начиная с PHP 7.2.0 и была УДАЛЕНА в версии PHP 8.0.0. Использовать эту функцию крайне не рекомендуется.
Зачастую заставить работать существующее PHP-приложение в многобайтовом окружении оказывается довольно трудной задачей. Это происходит, потому что большинство PHP-приложений написано с использованием стандартных функций обработки строк, таких как substr(), которые не умеют работать со строками в многобайтовых кодировках.
mbstring поддерживает механизм 'перегрузки функций', который позволяет сообщить приложению о том, что используется многобайтовая кодировка, без модификации кода, отвечающего за работу со строками. Например, если включена перегрузка функций, то функция mb_substr() будет вызываться вместо 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.