simplexml_load_file: Probleme mit Umlauten

supersalzi

Erfahrenes Mitglied
Hey,

Wie muss ich denn Umlaute in dem xml file verwenden, um ihn mit simplexml_load_file auszulesen?
wenn es nur Umlaute sind werden die falsch Dargestellt, bei html codierten Umlauten (ä ) wird mir ein Fehler zurückgegeben: parser error : "Entity 'auml' not defined in"

Wo muss ich die den definieren?

Danke, Salzi
 
sorry, das blick ich nicht ganz.

ich habe xml Dateien, die Umlaute enthaltne und anständig geparst werden.
Nun möchte ich ein xml Dokument mit simplexml_load_file einlesen, was nicht geht siehe oben.
Was für zeichen muss ich denn nun in den xml schreiben?
salzi
 
Probier mal Folgendes:
PHP:
function htmlentities_decode( $string )
{
	$trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
	$trans = array_flip($trans);
	return strtr($string, $trans);
}

$xml = simplexml_load_string(utf8_encode(htmlentities_decode(file_get_contents('xml'))));
 
Hi, danke erstmal!

Aber ich komme nicht vom Fleck.

Meine xml Datei beginnt mit: <?xml version="1.0" encoding="ISO-8859-1"?>
auch wenn ich es in UTF-8 änder hilft das nichts.

Ich habe die Klasse (Klasse?) ausprobiert, auch mal mit utf8_decode anstatt utf8_encode versucht, es kommen entweder nur Fragezeichen, oder komische Sonderzeichenkombinationen raus:

Ich mache folgendes mit dem xml File:
PHP:
<?php
    $filename = 'html_news.xml';
	
	function htmlentities_decode( $string )
{
    $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
    $trans = array_flip($trans);
    return strtr($string, $trans);
}


    
    if(file_exists($filename)) {
      //  $xml = simplexml_load_file($filename);     //Lädt die XML-Datei in ein Objekt
		$xml = simplexml_load_string(utf8_encode(htmlentities_decode(file_get_contents($filename))));
      if($xml) {    //Prüfen, ob Datei Fehler enthielt
            ?>
        <table>
            <tr>
                <td>&Uuml;berschrift</td>
                <td><?php echo $xml->h2 ?></td>

Das kann doch nicht so kompliziert sein, oder?
 
Ob der Einsatz der utf8_encode()- beziehungsweise utf8_decode()-Funktion sinnvoll ist, hängt von den verwendeten Zeichenkodierungen der Quelldatei (die XML-Datei) und der Ausgabe des PHP-Skriptes. Hier eine Übersicht:
Code:
Zeichenkod. der Quelle | Zeichenkod. der Ausgabe | benötigte Funktion
-----------------------+-------------------------+-------------------
 ISO-8859-1            | ISO-8859-1              | -
 ISO-8859-1            | UTF-8                   | utf8_encode()
 UTF-8                 | ISO-8859-1              | utf8_decode()
 UTF-8                 | UTF-8                   | -
In jedem Fall ist die explizite Angabe der verwendeten Zeichenkodierung (siehe „Content-Type“-Header-Feld) empfehlenswert.
 
Das klingt alles ganz logisch, aber warum es bei mir nicht will kann ich mir immer noch nicht denken.

Ich poste mal die ganzen Dateien:

PHP:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" >
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1"/>
</head>
<body>
<?php
    $filename = 'html_news.xml';
	
	function htmlentities_decode( $string )
{
    $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
    $trans = array_flip($trans);
    return strtr($string, $trans);
}

    if(file_exists($filename)) {
      //  $xml = simplexml_load_file($filename);     //Lädt die XML-Datei in ein Objekt
	  
		$xml = simplexml_load_string(utf8_encode(htmlentities_decode(file_get_contents($filename))));
      if($xml) {    //Prüfen, ob Datei Fehler enthielt
            ?>
        <table>
            <tr>
                <td>&Uuml;berschrift</td>
                <td><?php echo $xml->h2 ?></td>
                <td><?php echo $xml->p ?></td>
            </tr>
         </table>
<?php    
        } else {
            echo '        <p>Die Datei names '. $filename .' konnte nicht geöffnet werden</p>';
        }
    }
?>
</body>
</html>

und die XML
HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>

<div id="news">

<h2>Überschrift <span>| 05.06.2006</span></h2>
<p>irgendwas.</p>

<h2>Gästebuch <span>| 14.04.2006</span></h2>
<p>Das Gästebuch ist schön.</p>

</div>

Es kommt dieses Raus:
Code:
Überschrift Überschrift irgendwas.

hat noch jemand eine Idee? (mir ist der weg eigentlich egal, ich will eben nur den Inhalt aus den Tags haben, könnte auch mit irgendwas ganz anderem gemacht werden, aber ich kenne nichts)
Danke!
 
Wenn ich das hier teste, zeigt er alle Umlaute richtig an:

PHP:
<?php
   
   $filename = 'html_news.xml';
    
   function htmlentities_decode( $string ){
      $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
      $trans = array_flip($trans);
      return strtr($string, $trans);
   }

   if(file_exists($filename)) {
   //  $xml = simplexml_load_file($filename);     //Lädt die XML-Datei in ein Objekt
      
   $xml = simplexml_load_string(htmlentities_decode(file_get_contents($filename)));
   
     if($xml) {    //Prüfen, ob Datei Fehler enthielt
?>
       <table>
           <tr>
              <td>&Uuml;berschrift</td>
              <td><?php echo utf8_decode($xml->h2) ?></td>
              <td><?php echo utf8_decode($xml->p) ?></td>
           </tr>
       </table>
<?php    
    
      } 
      else{
           echo '<p>Die Datei names '. $filename .' konnte nicht geöffnet werden</p>';
      }
    }
?>
 
Zurück