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