Проблема в том, что php когда парсит query_string, натыкаясь на %AD%, думает что на строку наложено urlencode и пытается ее раскодировать.
Моей задачей было про получить хоть какую-ту строку без ломанных символов(т.к. они ломали логику приложения), решилось преобразованием в utf8 с игнорированием неюникодных символов:
$value = iconv('UTF-8', 'UTF-8//IGNORE', $value);
Как решить более красиво, чтобы последовательность символов осталась, я пока не придумал.