Алексей Уколов: Это аналог --enable-zend-multibyte для использования в самом коде. Объявляется один раз в самом начале файла, и все Zend функции будут работать в мульти-байтовом режиме.
Именно этот способ используют многие крупные фреймворки.
Не имею ничего против вашего решения, оно тоже действенное, но для тривиальной задачи лучше использовать declare.
Почитал про zend-multibyte - ведь этот флаг включает возможность писать исходники в UTF, насколько я понял, он никак не влияет на поведение строковых или каких-то других функций. По крайней мере, я не нашел никаких упоминаний об этом.
Enables multibyte code in the language parser and scanner to be executed. When PHP is compiled with this option, it also enables the encoding directive in the declare construct.
Enables parsing of source files in multibyte encodings. Enabling zend.multibyte is required to use character encodings like SJIS, BIG5, etc that contain special characters in multibyte string data. ISO-8859-1 compatible encodings like UTF-8, EUC, etc do not require this option.
Andrzej Wielski: ну и формулировка про забивание гвоздя крейсером в корне неверна - возможность перегрузки функций была создана именно для таких ситуаций, которую описал автор. А вот ваше решение больше похоже на хак, не говоря уж о том, что мне не удалось его запустить.
До какой-то бородатой версии php (5.2 с чем-то, если я правильно помню) можно было включить переопределение в .htaccess, но сейчас только в php.ini. Если у вас нет туда доступа, то решение только одно - переписывать все вызовы функций на нормальные.
MdaUZH: Указывается единожды в самом верху исполняемого файла. Учитывая то, что это фреймворк, думаю точка вхождения index.php, и оттуда уже все пляшет. Значит первой строкой вызывайте эту функцию.
P.S. Не забудьте отметить решением наши с Алексей Уколов ответы :)
MdaUZH: а вы когда помечали этот ответ решением, вас не смутило, что у вас оно вообще не завелось, а я приложил ссылки, по которым видно, что оно не решает вашу проблему?