У меня много проблем со значениями Unicode (UTF-16) и PHP / XML. Я хочу прочитать набор значений Unicode из XML и вывести правильные глифы в браузер. Я пробовал с UTF-8, и у меня та же проблема.
Это простой рабочий пример, который я использовал для моего первого теста:
$text = "\x00\x41";
$text = mb_convert_encoding($text, "ASCII", "UTF-16");
echo $text;
Вывод вышеуказанного кода:
A
Однако, когда я пытаюсь получить значения из XML, вещи перестают работать.
XML:
<glyphs>
<code>0041</code>
<code>0042</code>
<code>0043</code>
<code>0044</code>
<code>0045</code>
<code>0046</code>
</glyphs>
В php я читаю каждое значение из приведенного выше xml, разбиваю на пары и форматирую, например, \ x00 \ x41 и т. д.
PHP:
// load xml
$xml = simplexml_load_file('encoding.xml');
if ($xml) {
// get families
foreach($xml->children() as $item) {
$pairs = str_split($item, 2);
$hex = "\x" . $pairs[0] . "\x" . $pairs[1];
// check value...
echo $hex . '<br/>';
$text = mb_convert_encoding($hex, "ASCII", "UTF-16");
echo $text;
}
}
else {
return 'The input is malformed.';
}
Вывод в браузере:
\x00\x41
????
\x00\x42
????
\x00\x43
????
\x00\x44
????
\x00\x45
????
\x00\x46
????
Вопросительные знаки должны быть A, B, C, D, E, F.
Что я делаю не так?
Спасибо.