simplexml_load_file - Problem mit URLs

Dirk_SV

Grünschnabel
Hallo,

ich habe folgendes Problem: In einer Textdatei sind zeilenweise URLs zu XML-Dateien gespeichert. Diese Datei lese ich per PHP und "fgetss" aus und speichere die jeweilige URL in einer Variablen $url.

Lasse ich mir die Variable $url per "echo" ausgeben, wird mir der Inhalt (also die URL zur XML-Datei) korrekt angezeigt. Will ich aber diese Datei mittels "simplexml_load_file" öffenen, bekomme ich die Fehlermeldung "Opening and ending tag mismatch".

Der PHP-Code:

PHP:
<?php
$shopliste = 'http://www.meineseite.de/shopliste.txt';
$fp = fopen ( $shopliste, 'r' );

while ( $zeile = fgetss ( $fp, 1500 ) )
{
        echo "URL : ".$zeile;
	$shop = simplexml_load_file($zeile);
}
fclose( $fp );
	
?>

Die Ausgabe sieht so aus:
URL : http://www.andereseite.de/shopinfo.xml
Warning: simplexml_load_file() [function.simplexml-load-file]: http%3A//www.andereseite.de/shopinfo.xml%0A:9: parser error : Opening and ending tag mismatch

Warum wird der String in der Variablen $url umgewandelt? Warum werden aus den ":" -> "%3A" ? Was kann ich dagegen tun? Wo liegt mein Fehler?

Vielen Dank schon mal!
 
Zuletzt bearbeitet:
Nein, ich denke nicht. Die URLs stehen ja auch im Klartext in der Shopliste. Wie könnte ich das herausfinden?
 
Ich sehe gerade, dass die Zeilen in $zeile gespeichert werden, später aber $url verwendet wird. Ist das tatsächlich so?
 
Sorry, nein mein Fehler. Hab den Code grad berichtigt.

Also ich hab auch schon alles mir mögliche ausprobiert. Es kommt immer das gleiche dabei raus. Die Ausgabe im Browser per ECHO funktioniert, aber die Funktion "simplexml_load_file" baut da diese Codierung ein. Hab vorher schon URLENCODE angewendet, bleibt aber beim gleichen Fehler.
 
Zuletzt bearbeitet:
Ist es möglich, dass das XML-Dokument tatsächlich korrupt ist? Vielleicht wird ja ein Fehlerdokument statt des XML-Dokuments ausgeliefert.
 
Das ist nicht der Fall, denn wenn ich statt der beschriebenen Schleife die erste URL aus der Shopliste "manuell" per simplexml_load_file öffne, funktioniert alles bestens. So z.B.:

PHP:
<?
$zeile = "http://www.andereseite.de/shopinfo.xml";
$shop = simplexml_load_file($zeile);
$shopname = (string) $shop->'Name';
echo $shopname;
?>
 
Ach ja: die Zeilenumbruchzeichen bleiben bei der fgetss()-Funktion erhalten (wie ja auch an %0A zu sehen). Diese müsstest du noch mit trim() entfernen.
 
HEUREKA! - Es funktioniert!
Du bist mein persönlicher Held heute! Wie einfach doch manche Dinge wären, wenn man nicht schon nach stundenlanger Fehlersuche betriebsblind werden würde.

Mein erster Drink heute abend geht auf Dich! Vielen Dank und ein schönes Wochenende!
 
Zurück