Как на PHP обрезать UTF-8 строку без появления артефактов в конце?

Используйте функцию mb_strimwidth():

echo mb_strimwidth("Очень-преочень длинная-предлинная UTF-8 строка ", 0, 20, "...", "UTF-8");