Отмена func_overload для include файлов

MVH

Новичок
Отмена func_overload для include файлов

Проблема в следующем.
Есть скрипт и несколько библиотек к нему, работающих в UTF-8. Для них через htaccess включено mbstring.func_overload.
Но, скрипт так же инклудит одну библиотеку, работающую в cp1251, для которой включённый func_overload - смерть.

Скажите, как для одного из include файлов отключить func_overload?

P.S.: файл именно через include полключается и .htaccess в папке с подключаемым файлом не срабатывает.
P.P.S.: php5, apache2, linux
 

MVH

Новичок
AmdY, для этого надо библиотеки ковырять, это крайнее средство. Придётся либо в UTF библиотеках заменять ф-и на mb_* аналоги и отрубать func_overload для всех скриптов, либо в той библиотеке, которая в cp1251 (phpMorphy), делать подобные замены с указанием однобайтовой кодировки. И в том и в другом случае гемора будет достаточно.
 

dimagolov

Новичок
с учетом того, что mbstring.func_overload устанавливается в php.ini и соответственно работает на весь движок (даже в .htaccess ман не рекомендует, тем более что .htaccess работает для запускаемого, а не подключаемых скриптов), то перегружать для одних моментов и не перегуржать для других не выйдет. Правильнее будет переписать UTF-ные либы под прямое ипользование mb_ ф-й.
 

MVH

Новичок
dimagolov, спасибо Вам, доктор. :) Так и знал, что диагноз будет неутешительный :(
 

fixxxer

К.О.
Партнер клуба
можно там где не нужен mbstring заменить все функции на orig_*
 

x-yuri

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

MVH

Новичок
x-yuri, библиотеки мои были, так что с переписыванием проблем не возникло. ;)
Я почему-то думал, что это геморройно будет, но хватило простого регекса для замены, предварительно бегло просмотрев поиском по этому регексу, не захватывает ли он лишнего.
Ну и указанием в начале mb_internal_encoding('utf-8');
P.S.: если кому понадобится, вот регекс:
Код:
(?<![a-z_])((check_encoding|convert_case|convert_encoding|convert_kana|convert_variables|decode_mimeheader|decode_numericentity|detect_encoding|detect_order|encode_mimeheader|encode_numericentity|ereg_match|ereg_replace|ereg_search_getpos|ereg_search_getregs|ereg_search_init|ereg_search_pos|ereg_search_regs|ereg_search_setpos|ereg_search|ereg|eregi_replace|eregi|get_info|http_input|http_output|internal_encoding|language|list_encodings|output_handler|parse_str|preferred_mime_name|regex_encoding|regex_set_options|send_mail|split|strcut|strimwidth|stripos|stristr|strlen|strpos|strrchr|strrichr|strripos|strrpos|strstr|strtolower|strtoupper|strwidth|substitute_character|substr_count|substr)\s*\()
заменяем на:
Код:
mb_$1
 

MVH

Новичок
x-yuri, не, у меня использовались ф-и mb_strlen, mb_substr и ещё пара, которые оверлоадятся. Просто для регекса на скорую руку скопировал все ф-и из левого столбца. :) Что-то я упустил из вида, что там есть мультибайтовые ф-и, не имеющие однобайтовых аналогов. :)
 
Сверху