Вы извлекаете свои данные из более чем одного канала, поэтому вы не можете зависеть от всех каналов, которые вы используете, с одинаковой кодировкой символов.
Фиды XML должны сообщать, какой кодировкой они являются в преамбуле XML, и сервер должен посылать заголовки, указывающие кодировку символов, которую использует файл, но они не обязательно присутствуют, и если они есть, они не уверены быть точным
Вы можете использовать mb_detect_encoding , чтобы попытаться выяснить, какую кодировку использует файл, который вы анализируете, но, опять же, это не на 100% точно.
Так что, если ваша цель - нормализовать все каналы, которые вы обрабатываете, в один и тот же набор символов (я полагаю, UTF 8), вы можете посмотреть на преамбулу XML, заголовки (если был отправлен соответствующий) и результат mb_detect_encoding для определения кодировки. Если все вышесказанное согласится, вы, вероятно, (но не обязательно) хорошо знаете, в какой кодировке находится файл и что вам нужно сделать для его преобразования. Если между этими методами есть разногласие, вам придется решить для себя, какое действие предпринять.
Короче, добро пожаловать в charset hell. Как вам это нравится?