Модуль XML в PHP поддерживает набор символов » Unicode через разные кодировки символов. Есть два типа кодировок символов в этом модуле, исходная кодировка и целевая кодировка. Внутреннее представление документа в PHP всегда кодировано в UTF-8.
Исходное кодирование происходит, когда XML документ разбирается. При создании анализатора XML может быть определена исходная кодировка (эта кодировка не может быть изменена позже, во время работы XML анализатора). Поддерживаются исходные кодировки ISO-8859-1, US-ASCII и UTF-8. Первые две являются однобайтными кодировками,что означает, что каждый символ представлен одним байтом. UTF-8 может кодировать символы, представленные переменным числом бит (вплоть до 21) в байты (от одного до четырёх). По умолчанию в PHP исходной кодировкой является ISO-8859-1.
Целевое кодирование происходит, когда PHP передаёт данные обрабатывающим XML функциям. Когда создаётся XML анализатор, целевая кодировка устанавливается такой же, как исходная кодировка, затем она может быть изменена в любой момент. Целевая кодировка повлияет на символьные данные, а также имена тегов и цели обрабатывающих команд.
Если XML анализатор встречает символы за пределами диапазона, которые их исходная кодировкам может предоставить, он возвращает ошибку.
Если PHP встречает символы в разбираемом XML документе, которые не могут быть представлены в выбранной целевой кодировке, проблемные символы будут "понижены". В данном случае это означает, что такие символы будут замещены вопросительным знаком.