Если у вас есть строка UTF-8, которая может содержать недопустимые символы, вы можете использовать iconv
для их удаления. Это должно работать:
$text = iconv("utf-8", "utf-8//ignore", $text);
Сделать их видимыми с произвольным заполнителем немного сложнее - я не могу придумать ни одного простого способа сделать это, кроме как пройти через каждый байт и посмотреть, является ли это действительным символом. В статье Википедии содержится дополнительная информация о том, как это сделать.