PHP и работа с иностранными символами для UTF-8 XML - PullRequest
0 голосов
/ 21 июля 2009

В настоящее время я собираю некоторые данные из Интернета и преобразую их в XML-документы.

  • удаляемый документ - это utf-8 в соответствии с его метатегами

Проблема в том, что некоторые данные содержат иностранные символы, я не могу найти способ надежного преобразования их в дружественные к XML / utf-8 сущности, следующие ошибки - это то, что мне удалось найти, прочитав, в идеале мне бы хотелось решение, которое будет работать постоянно.

Пример 1 работает правильно, пример 2 не работает. Мое исследование зафиксировало пример 1, но, похоже, это не общее решение.

Côte d'Ivoire  
Côte d'Ivoire (correct)  

Мне удалось правильно разобрать - ô -, используя следующую функцию на моем xpath.

$w->text(charset_decode_utf_8((string)$match->a));

function charset_decode_utf_8($string) {
    if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) {
        return $string;
    }
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);
$string = preg_replace("/([\300-\337])([\200-\277])/e","'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string);
return $string;
}
ÖFB Stiegl Cup  
ÖFB Stiegl Cup (wrong)  

К сожалению, ... - он превращается в двойную сущность. Я понятия не имею, как заставить его преобразовать в правильную HTML-сущность.

Я пытался:

  • с использованием кодировки iso-8859-1 при создании моего xml-документа
  • с использованием htmlentities с кодировкой utf-8

Любая помощь будет принята с благодарностью, так как я рву свои волосы, пытаясь заставить вещи спасти правильно.

Ответы [ 2 ]

1 голос
/ 21 июля 2009

UTF-8 может использоваться для хранения любого символа (доказательство? Он хранит их на веб-страницах, которые вы просматриваете) ; Итак, зачем кодировать некоторые как сущности?

Если вы открываете документы XML и видите проблемы с кодировкой, проверьте параметры вашего редактора: пытается ли он проанализировать документ как UTF-8? (Некоторые редакторы по умолчанию этого не делают - если вы открываете документ на жестком диске с помощью браузера, он может не распознать его как UTF-8, поскольку нет сервера для отправки какого-либо заголовка, указывающего, что это UTF-8)

Если проблема не в этом, можете загрузить пример проблемного XML-документа куда-нибудь?

0 голосов
/ 21 июля 2009

Не беспокойтесь о кодировании объектов. Вместо этого используйте блоки CDATA.

PHP не понимает UTF-8. Он думает, что это путевой поток. Лучше всего относиться к этому так. Вы перемещаете байты вокруг, и все, что вам нужно сделать, это убедиться, что они не анализируются, и они помечены правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...