XML неправильно сформирован из-за длинных символов UTF

Хорошо, я надеюсь, что кто-то может помочь, потому что я не смог найти решение для этого.

В базе данных клиентам удалось импортировать или иным образом добавить данные символов из другого набора символов, например:

  <E2><80><99>

Я считаю, что это UTF-16.

Вывод XML моего скрипта вызывает ошибки из-за этих данных (которые извлекают строки, такие как поле «описание», из базы данных и создают файл XML).

Ошибка синтаксического анализа XML: неверный формат строки номер 20, столбец 50.

Есть и другой шестнадцатеричный код, который длиннее, например ‹80>‹99> (просто пример, я не уверен, что это реальный символ).

Как я могу сделать свой файл XML действительным и либо уменьшить набор символов, либо заставить его использовать UTF-32 следующим образом:

  AddType "application/xml; charset=UTF-32" xml  (in .htaccess file along with filesmatch .xml)


  <?xml version='1.0' encoding='UTF-32' ?>   (placed in head of xml file)

person Paul Cravey    schedule 02.05.2012    source источник
comment
0xe2 0x80 0x99 - это UTF-8 для «ПРАВИЛЬНОЙ ОДИНОЧНОЙ КАВАТЫ» (U + 2019), я думаю, что ваша проблема заключается в другом. Не могли бы вы показать нам первые несколько строк xml?   -  person Anders Lindahl    schedule 02.05.2012
comment
Где вы видите эти ошибки? У вас есть пример URL? Что такое строка номер 20? Что находится в столбце 50?   -  person hakre    schedule 02.05.2012
comment
Вот пример: Ошибка синтаксического анализа XML: неправильный формат Местоположение: xxxx/xml/hal-default.xml Строка номер 20, столбец 50: ‹описание›Ранчо Hangmans Creek — это ранчо площадью 190 (специальный символ здесь после 190) акров. Посмотрите на это через шестнадцатеричный редактор: 0001140 3931 b130 6120 7263 2065 6172 636e 2068 1 9 0 1 кв. акр sp ранчо sp Это что-то проясняет?   -  person Paul Cravey    schedule 02.05.2012
comment
Какая программа выдает вам эту ошибку? Это PHP? Если да, то каков соответствующий PHP-код?   -  person hakre    schedule 02.05.2012
comment
Эта ошибка возникает при просмотре файла .xml в браузере (в моем случае FireFox 10), а также в других браузерах.   -  person Paul Cravey    schedule 03.05.2012


Ответы (1)


Что бы это ни было: UTF-8, -16 или -32. Если вы выберете какую-либо другую кодировку для своего вывода, вы должны - если она отличается - сначала перекодировать свой ввод для вывода.

В своем вопросе вы четко указываете, что не знаете, что такое входная кодировка. Это момент, который вам нужно прояснить, потому что кодирование — это метаинформация. Вы должны знать это правильно, чтобы обрабатывать строки. Из того, что вы поделились, похоже, что ввод закодирован в UTF-8. Вы должны убедиться, что (Как обнаружить искаженную строку utf-8 в PHP?).

Следующее, что искажение не должно означать проблемы с кодировкой (но может быть). Пока вы не поделитесь источником проблемы (в идеале рядом с текстовой формой, а также с шестнадцатеричным дампом), я бы сказал, что по текущей информации можно дать не так много советов.

person hakre    schedule 02.05.2012
comment
Вот пример: Ошибка синтаксического анализа XML: неправильный формат Местоположение: xxxx/xml/hal-default.xml Строка номер 20, столбец 50: ‹описание›Ранчо Hangmans Creek — это ранчо площадью 190 (специальный символ здесь после 190) акров. Посмотрите на это через шестнадцатеричный редактор: 0001140 3931 b130 6120 7263 2065 6172 636e 2068 1 9 0 1 кв. акр sp ранчо sp Это что-то проясняет? - person Paul Cravey; 02.05.2012