我在使用 unicode (UTF-16) 值和 PHP/XML 时遇到了很多麻烦。我想从 XML 中读取一组 unicode 值并将正确的字形输出到浏览器。我已经尝试过使用 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。
我究竟做错了什么?
谢谢。