Часто встречается проблема при которой на сайте выводятся знаки вопроса или разные символы кракозяб при обрезании текста.
Это происходит при использовании функции substr.
Причина в том что эта функция нормально работает только с латиницей на англоязычных сайтах.
Русский язык более требовательный и работает как правило в кодировке UTF-8.
Для того чтобы решить эту проблему, нужно заменить функцию обрезки на что то типа
mb_substr($str, 0, 3, 'UTF-8');