Проблема кодирования Simplexml - PullRequest
1 голос
/ 08 января 2012

Я не совсем уверен, если это проблема кодирования или что, но у меня проблема с использованием простого XML с некоторыми символами в тексте

$xml = <<<HOHOHO
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<videos>
    <video>
    <ContentProvider>bl abla</ContentProvider>
    <ArtistName>T-Boz</ArtistName>
    <CopyrightLine>(C)2009 SME Espa&#xF1;a, S.</CopyrightLine>
    </video>
</videos>
HOHOHO;

$a = simplexml_load_string ($xml);

foreach ( $a->video as $new ) 
    die($new->CopyrightLine);

Дело в том, что & # xF1; характер запутывается и становится чем-то вроде Ăą, когда оно должно быть -. Я нахожу странным, что simplexml все равно меняет это на символ, вместо того, чтобы просто сохранить его как есть ...

Я знаю, что это как-то связано с шестнадцатеричными кодами, но я пока не нашел решения

Вещи, которые я пробовал до сих пор: преобразование строки в iso-8859-2 с помощью mb_convert_string, преобразование строки в utf-8 с помощью mb_convert_string, конвертирование с помощью html_entity_decode, преобразование с использованием html_special символов

все вышеперечисленные попытки либо не смогли разобрать xml, либо просто не исправили символ

Помощь бы мне очень понравилась!

1 Ответ

5 голосов
/ 08 января 2012

У вас проблема не во входной строке, а в выходной.SimpleXML использует UTF-8 для внутреннего использования, и если вы запрашиваете строку у SimpleXMLElement, вы получите строку, закодированную как UTF-8.

$output = (string) $new->CopyrightLine; # will always be UTF-8 encoded

Так что вам нужно перекодировать с выводом, а невход.

Сравните с этим примером кода и выведите , который отображается как UTF-8, в то время как вход является вашим входом.

Кстати, между прочимпотому что SimpleXML всегда будет давать вам строки в кодировке UTF-8.

...