Ещё одна мелочь в копилку проблем PHP. Насколько всёже угрёбищно работает этот язык с юникодом. И это в новом PHP 5.
Вот абстрактный кусок кода:
<?php
mb_ereg_search_init($string, '[[:alpha:]]+');
$len = mb_strlen($string);
$location = mb_ereg_search_pos();
print_r($location);
?>
В $string - строка на русском в UTF-8. Для корректной работы с UTF-8 как можно видеть задействованы функции mbstring, не стал использовать override для них, вызвал явно. Первая функция инициирует поиск регвыражения в строке $string, ок, тут всё в порядке. Вторая получает длину строки - как и ожидаемо с учётом двухбайтовых русских символов, т.е. длина в символах, не в байтах. Дальше делаем поиск, который возвращает массив из двух элементов - смещение и длину найденного фрагмента. И вот тут эта зараза возвращает уже не смещение и длину в символах (работаем ведь со строкой), а значения в байтах! В руководстве правда это явно указано: