Механизм перегрузки функций

Зачастую заставить работать существующее 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()
4 ereg() mb_ereg()
4 eregi() mb_eregi()
4 ereg_replace() mb_ereg_replace()
4 eregi_replace() mb_eregi_replace()
4 split() mb_split()

Замечание:

Не рекомендуется использовать перегрузку функций в контексте поддиректорий, так как добиться стабильной работы в этом случае пока не удалось, и это может привести к неожидаемому поведению приложения.

Коментарии

Автор:
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.
2010-07-26 05:25:38
http://php5.kiev.ua/manual/ru/mbstring.overload.html
Автор:
In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.
2014-06-16 14:10:53
http://php5.kiev.ua/manual/ru/mbstring.overload.html
Автор:
it's kinda evil and gives you tons of headache.
2016-03-18 06:40:26
http://php5.kiev.ua/manual/ru/mbstring.overload.html
Автор:
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.
2017-03-23 10:20:44
http://php5.kiev.ua/manual/ru/mbstring.overload.html

    Поддержать сайт на родительском проекте КГБ