我在一家国际公司工作,因此我们有很多语言可以满足。我遇到了一些特殊字符的问题。
我创建了一个独立的测试 php 页面来消除我的系统可能引入的任何其他问题。
从我阅读的各个页面中,我发现 SimpleXML 将 XML 处理为 UTF-8。例如:PHP SimpleXML 返回的值用奇怪的字符代替连字符和撇号
所以我在页面顶部做了那个:
header("Content-type:text/html; charset=UTF-8");
然后我这样做是为了检查:
print mb_internal_encoding();
不确定这是否是正确的功能,但它在 FF 和 Chome 中为我提供了 ISO-8859-1。
XML 看起来像这样:
$xml = '<?xml version="1.0" encoding="ISO-8859-15"?>
<Tracking>
<File>
<FileNumber>çúé$`~ € Š š Ž ž Œ œ Ÿ</FileNumber>
<OrigBranch>124</OrigBranch>
<Login></Login>
</File>
</Tracking>';
这打印出来很有趣,但是对于我需要的页面,我不太担心它如何在浏览器中打印出来,因为实际页面实际上将从 cron 运行以将 XML 导入 MYSQL DB,所以显示不太重要。它虽然像这样在FF上显示
print $xml;
���$`~ � � � � � � � � � 124
然后我创建 SimpleXML 对象:
$parser = new SimpleXMLElement($xml);
print_r($parser);
这打印出来:
[File] => SimpleXMLElement Object
(
[FileNumber] => çúé$`~
[OrigBranch] => 124
[Login] => SimpleXMLElement Object
(
)
)
我不太担心 print $xml; 中的有趣字符,但更需要修复插入数据库的 SimpleXMLElement 对象中的字符。为什么 SimpleXMLElement 对象会丢失“~”之后的字符。我试图在标头函数调用中将字符集更改为 ISO-8859-15,但这只会导致打印 $xml; 看起来稍微好一些,但在“~”之后仍然缺少字符,但是 SimpleXMLElement 给出了致命错误:
'String could not be parsed as XML
我在解析 XML 之前尝试过:
$xml = mb_convert_encoding($xml, "ISO-8859-15");
$xml = iconv('UTF-8', 'ISO-8859-15//TRANSLIT', $xml)
但这些也无济于事。有什么建议么?