Отчасти проблема в том, что вы не рассматриваете цель как строку UTF-8;для этого вам нужен модификатор /u
.Кроме того, в UTF-8 любой не-ASCII символ представлен двумя или более байтами, каждый из которых находится в диапазоне \x80..\xFF
.Попробуйте это:
preg_replace('/\p{Cc}+/u', '', $value)
\p{Cc}
- это свойство Unicode для управляющих символов, а u
заставляет и регулярное выражение, и целевую строку обрабатываться как UTF-8.