我有一个用 php 解析的 xml,其中包含一些变音符号。每个包含字符串的节点都将字符串包裹在 cdata 标记中,但我的问题在解析 xml 之前就开始了:当我加载文件时(我也尝试使用 file_get_contests 打印出文件的内容,结果相同),元音变音字符被破坏,例如 ü 变为 ü。运行 htmlentities() 是徒劳的,因为此时字符已经损坏。xml 编码是 utf-8,所以我不知道还能做些什么来避免这个问题。任何人都可以帮助我吗?
编辑:xml 示例“locations.xml”:
<?xml version="1.0" encoding="utf-8"?>
<locations>
<location>
<id>481</id>
<city><![CDATA[Zürich]]></city>
</location>
</locations>
php代码:
function parseLocations(){
$xml = new DOMDocument();
$xml->load('locations.xml');
$xml->preserveWhiteSpace = false;
$data = array();
$locations = $xml->childNodes->item(0);
for($i=0; $i<$locations->childNodes->length; $i++){
$location = $locations->childNodes->item($i);
if($location->nodeName=="location"){
$tmp = parseVenue($location);
$data[] = $tmp;
}
}
echo var_export($data, true);
}
function parseVenue($location){
//I need to exclude some of the nodes
$exclude = array('#text');
$data = array();
for($i=0; $i<$location->childNodes->length; $i++){
$tag = $location->childNodes->item($i);
if(!in_array($tag->nodeName, $exclude)){
$data[$tag->nodeName] = $tag->nodeValue;
}
}
return $data;
}
回显输出:
array ( 0 => array ( 'id' => '481', 'city' => 'Zürich'), )