1

いくつかのウムラウト文字を含む、php で解析する xml があります。文字列を含むすべてのノードには、cdata タグでラップされた文字列がありますが、xml を解析する前に問題が発生します。ウムラウト文字が壊れるため、たとえば ü は ü になります。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'), ) 
4

0 に答える 0