Очень популярной кодировкой текста в современном Вебе является «UTF-8». Например, именно её использует WordPress. Кодировка эта мультибайтная, благодаря чему в ней закодированы сотни алфавитов и разнообразные графические символы.
Но многие функции PHP писались изначально под однобайтные кодировки. Если при использовании таких функций (например, substr()) указать, что вам нужно взять первые 100 символов строки, то функция возьмёт первые 100 байт. Однако, 1 байт в кодировке «utf-8» занимают далеко не все символы. К примеру, английские буквы и знаки препинания занимают 1 байт, а вот русские буквы занимают 2 байта.
Не все функции учитывают такую особенность кодировки «utf-8», потому случается, что при обрезке строки последний символ «режется пополам». В итоге в конце строки мы имеем символ с номером, отображение которого браузером не предусмотрено — он и будет показан как вопросик в ромбе или какая-то другая непонятная неожиданная символика.
Надеюсь, на твой вопрос я ответил, если ты это имел ввиду.