我正在从事这个项目,我从不同的来源接收不同的 XML 文件。我的 PHP 脚本应该读取它们、解析它们并将它们存储到 mysql 数据库中。
为了解析 XML 文件,我使用 PHP 中的 SimpleXMLElement 类。我以 UTF-8 编码从比利时接收文件,以 iso-8859-1 编码从德国接收文件,以 cp1250 从捷克共和国接收文件,依此类推...
当我将 xml 数据传递给 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(我认为它可以显示任何内容?)
如何转换我的数据,使其始终显示,无论源代码是什么?