我正在处理这个项目,我收到来自不同来源的不同XML文件。我的PHP脚本应该读取它们,解析它们并将它们存储到mysql数据库中。
要解析XML文件,我使用PHP中的SimpleXMLElement类。我收到来自比利时的UTF-8编码文件,来自德国的iso-8859-1编码,来自捷克共和国的cp1250,依此类推......
当我将xml-data传递给SimpleXMLElement并在此对象上打印asXML()时,我会正确地看到xml数据与原始xml文件中的数据一样。 当我尝试将字段分配给PHP变量并在屏幕上打印此变量时,文本看起来已损坏,当插入mysql数据库时当然也会损坏。
示例:
XML:
<?xml version="1.0" encoding="cp1250"?>
...
<name>Labe Dìèín - Rozb 741,85km ; Dìèín - Rozb 741,85km </name>
...
PHP代码:
$sxml = file_get_contents("test.xml");
$xml = new SimpleXMLElement($sxml);
//echo $xml->asXML() . "\n"; // content will show up correctly in the shell
$name = (string)$xml->ftm->fairway_section->geo_object->name;
echo $name . "\n";
代码的结果(在linux bash shell上)向上移动光标然后打印:bÃn - Rozb 741,85km; DÄ(光标移动当然与PHP打印出的错误字符有关)
我认为PHP将其数据转换为UTF-8以将其存储在字符串参数中,因此我假设使用mb_convert_encoding从UTF-8转换为cp1250将显示正确的结果,但事实并非如此。此外,我应该能够以可与所有其他来源组合的格式存储数据。
我对编码/代码页知之甚少,这可能是我无法正常工作的原因,但我所知道的是,如果我将来自不同语言的文本复制/粘贴到例如新的UltraEdit文件,所有这些都显示正确。 UltraEdit如何处理这个问题?它是否使用UTF-8(我认为可以显示任何内容?)
如何转换我的数据,以便它始终显示在源上的任何编码?