Дело в том, что функция substr изначально предназначена для работы с латинскими символами, которые представлены одним байтом. А все кириллические символы представлены двумя. Вот браузер и не знает, как отобразить пол русской буквы.
Так что специально для этого и ввели mb_substr. Кстати, есть еще несколько функций для работы со string типом данных с префиксами mb_. И для работы с кириллицей лучше использовать именно их.