38. DimmoS, В юникоде русские буквы - по 2 байта каждая, латинские и пробел - 1 байт. substr режет по байтам, и битые символы в итоге получаются из за 2-байтного русского символа, распиленного пополам substr.
mb_substr, в свою очередь, корректно работает с многобайтовыми кодировками.
"mb_substr <...> Корректно выполняет substr() для многобайтовых кодировок, учитывая количество символов."
Только для корректной работы mb_substr требуется в шапке объявить, что все данные будут в utf-8, с помощью mb_internal_encoding().
И так как проблема в кодировке, то бороться нужно с кодировкой, а плясать с бубном вокруг очередной новости на сайте так, чтобы она корректно обрубилась.
Изменил: Влад (26.11.2014 / 18:21)