ü erzeugt Fehler
Martin
- xml
Ich lese mit PHP eine Datei, die HTML enthält und erzeuge aus den Daten eine XML-Datei. Damit XML damit was anfangen kann, wandle ich sie mit htmlentities() um. Jetzt streikt der Parser aber, wenn die Datei einen Umlaut enthält. Dann kommt die Fehlermeldung:
Verweis auf eine nicht definierte Entität 'uuml'. Fehler beim Bearbeiten der Ressource ...
Was kann ich da machen?
Gruß und Dank
Martin
Ich probier's einmal mit einer weiteren Codierung/Decodierung in Base64. Oder gibt's was Einfacheres?
Gruß und Dank
Martin
hi,
Ich probier's einmal mit einer weiteren Codierung/Decodierung in Base64. Oder gibt's was Einfacheres?
gruß,
wahsaga
Hm...
1. Versuch:
<?php
$file = "test";
$content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
if($fh = fopen($file, "w")){
fwrite($fh,"<![CDATA[".stripslashes(str_replace("'","'",$content))."]]>");
fclose($fh);
}
$fh = fopen($file,"r");
$content = fread($fh, filesize($file));
fclose($fh);
$xml = "<root>";
$xml .= "<content>".htmlentities(trim($content))."</content>";
$xml .= "</root>";
header("Content-type: text/xml");
print($xml);
?>
Ergibt im Firefox:
XML-Verarbeitungsfehler: Undefinierte Entität
und als Quelltext:
<root><content><![CDATA[<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>]]></content></root>
2. Versuch:
<?php
$file = "test";
$content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
if($fh = fopen($file, "w")){
fwrite($fh,"<![CDATA[".stripslashes(str_replace("'","'",$content))."]]>");
fclose($fh);
}
$fh = fopen($file,"r");
$content = fread($fh, filesize($file));
fclose($fh);
$xml = "<root>";
$xml .= "<content>".trim($content)."</content>"; // OHNE HTMLENTITIES
$xml .= "</root>";
header("Content-type: text/xml");
print($xml);
?>
Ergibt im Firefox:
<root>
<content><DIV id="idContentDiv" >� � � � � � �</DIV></content>
</root>
bzw. im Quelltext:
<root><content><![CDATA[<DIV id="idContentDiv" >� � � � � � �</DIV>]]></content></root>
Und im MSIE:
Im Textinhalt wurde ein ungültiges Zeichen gefunden. Fehler beim Bearbeiten der Ressource.
Und was jetzt?
Gruß und Dank
Martin
Hi,
$content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
Welche Zeichencodierung hat die PHP-Datei?
$xml = "<root>";
$xml .= "<content>".htmlentities(trim($content))."</content>";
$xml .= "</root>";header("Content-type: text/xml");
Weder im content-type-Header noch in der (fehlenden) xml-Deklaration setzt Du ein encoding, es gilt also UTF-8.
Setze entweder das tatsächliche encoding oder wandele in UTF-8 um (aber nicht in HTML-Entities, die es in XML ja nicht gibt).
cu,
Andreas
Sorry:
<?php
$file = "test";
$content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
if($fh = fopen($file, "w")){
fwrite($fh,"<![CDATA[".stripslashes(str_replace("'","'",$content))."]]>");
fclose($fh);
}
$fh = fopen($file,"r");
$content = fread($fh, filesize($file));
fclose($fh);
$xml = "<?xml version="1.0" encoding="iso-8859-1""."?".">";
$xml .= "<root>";
$xml .= "<content>".trim($content)."</content>";
$xml .= "</root>";
header("Content-type: text/xml");
print($xml);
?>
Jetzt funktioniert's:
Firefox:
<root>
<content><DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV></content>
</root>
MSIE:
<?xml version="1.0" encoding="iso-8859-1" ?>
Nur muss ich jetzt wohl das <![CDATA[ und ]]> wieder loswerden, damit es dann im Script auch funktioniert?
Gruß und Dank
Martin
Hi,
Verweis auf eine nicht definierte Entität 'uuml'. Fehler beim Bearbeiten der Ressource ...
Was kann ich da machen?
die Entität definieren. Sie gehört nicht zum XML-Standardumfang.
Cheatah
Hi Cheatah,
Was kann ich da machen?
die Entität definieren.
Oder die numerischen Entities verwenden.
MfG, Dennis.
Hi,
Damit XML damit was anfangen kann, wandle ich sie mit htmlentities() um.
Damit XML etwas damit anfangen kann, sorgst Du dafür, daß XML nichts damit anfangen kann?
Seltsame Logik ...
cu,
Andreas
Hi,
Damit XML damit was anfangen kann, wandle ich sie mit htmlentities() um.
Wie kommst Du darauf, daß - valides xhtml vorausgesetzt - dies nötig wäre?
Es ist ziemlicher Blödsinn, Daten bei Speicherung derart zu verfälschen und htmlentities() ist dazu gedacht, HTML-Tags bei der Ausgabe in einer HTML-Seite zu "deaktivieren".
freundliche Grüße
Ingo
Hi,
und htmlentities() ist dazu gedacht, HTML-Tags bei der Ausgabe in einer HTML-Seite zu "deaktivieren".
Nö. Dazu ist htmlspecialchars() gedacht.
cu,
Andreas