Почему preg_match неправильно определяет позицию, если в строке есть диакритические знаки?

$str = 'ab'. mb_convert_encoding( '́', 'UTF-8', 'HTML-ENTITIES' ). 'cdef'; 
// $str = ab́cdef
preg_match( '#de#ui', $str, $matches, PREG_OFFSET_CAPTURE );
// $matches = Array ( [0] => Array ( [0] => de [1] => 5 ) ) 
$subs = mb_substr( $str, $matches[0][1], null, 'UTF-8' );
// $subs = ef


Позиция вхождения de, которую дает preg_match, должна быть 4, а не 5. В итоге функция mb_substr копирует подстроку не с той позиции. Почему так? Как согласовать работу preg_match и mb_substr?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
попробуй mb_ereg_match вместо preg_match, так как он работает с байтами в строке а не мультибайтовыми как все mb_...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект