2009-06-24 4 views
4

У меня есть следующий XML-код.Что заставляет мой XML ломаться?

<firstname> 
<default length="6">Örwin</default> 
<short>Örwin</short> 
<shorter>Örwin</shorter> 
<shortest>�.</shortest> 
</firstname> 

Почему происходит разрывание содержимого «кратчайшего» узла? Это должно быть просто «...» вместо утомительного . XML кодируется в кодировке UTF-8, а функция, обрабатывающая вывод этого узла, также записывает содержимое «коротких» и «коротких». Там, где «Ö» хорошо видно.

+0

Может быть, проблема метода я получаю сингл «Ö» с. Я использую $ firstname {0}, чтобы извлечь первый символ первого имени. Есть ли проблема с строками UTF-8? – individual8

+2

Кажется, я использовал неправильную внутреннюю кодировку в своем PHP-скрипте. Изменил его на mb_substr ($ firstname, 0,1, 'UTF-8'), чтобы получить первый символ первого имени, и он работает. – individual8

ответ

17

Я предполагаю, что XML не правильно UTF-8 закодирован. Пожалуйста, покажите байт в файле <shortest> в необработанном файле ... Подозреваю, вы обнаружите, что они не являются закодированным символом. Если бы вы могли показать короткую, но полную программу, которая генерирует этот XML из допустимого ввода, это было бы очень полезно. (Предпочтительно сказать, какая платформа это тоже :)

EDIT: В этом файле происходит что-то очень странное. Ниже приведены значения шестнадцатеричных для "коротких" и "коротких" значений:

Короче: С3 96 72 77 69 63

Кратчайшими: EF BF BD 2E

В настоящее время "C3-96" является действительным UTF-8 для U + 00D6, который является «латинской заглавной буквы O с диарезисом», как вы хотите.

Однако EF BF BD является кодировкой UTF-8 для U + FFFD, которая является «символом замены» - определенно не, что вы хотите. (2E - это просто точка ASCII.)

Итак, это действительно действительный UTF-8 - но он не содержит символов, которые вы хотите. Опять же, вы должны изучить, что создал файл ...

+1

Вы взяли уроки по набору текста в школе, не так ли? :) – kemiller2002

+1

Вы находитесь toooooooooooooo быстро – rahul

+0

Привет, Джон, вот файл (сохраненный из Firefox): http://clipboard.i8network.de/ged2xml.xml XML генерируется SimpleXML PHP в среде Linux. – individual8

-3

XML анализирует элементы внутри тегов, поскольку любой элемент может содержать вложенные элементы. Таким образом, ваш «ö» может нарушить разбор.

Поместите ваши данные внутри CDATA тег, например: http://www.w3schools.com/XML/xml_cdata.asp

+0

Я уже думал об этом. Но тогда почему другие умлауты не сломаются? – individual8