PHP 5 - Try Catch Problem
explofish
- php
Hallo liebe Community!
Ich habe ein kleines Problem:
Ich arbeite an einem System das Adressen in Längen und Breitengrade auflößt. Dazu benutze ich die Google Maps API. Diese schickt mir ein XML mit den Geologischen Informationen, die ich mit folgendem Code auslese:
§url="http://maps.google.com/maps/geo?q=$MEINEADRESSE&output=xml&key=$MEINKEY
$urlinhalt=file_get_contents($url);
//XML File utf8 konvertieren
$urlinhalt = utf8_decode ($urlinhalt);
//SimpleXMLElement Objekt erstellen
$xml = new SimpleXMLElement($urlinhalt);//-> Hier entsteht bei Manchen Adressen ein Fehler
if($xml){
//Koordinaten auslesen - trennen - und in 2 variablen speichern/Nachrichten speichern
$error = $xml->Response->Status->code;
if($error == "602"){$instantnachricht="Ihre Adresse wurde leider nicht gefunden!";}else{
list($instantlon, $instantlat, $altitude) = explode (",",$xml->Response->Placemark->Point->coordinates);
$instantnachricht="Für die Suche nach $adresse wurden folgende Ergebnisse gefunden:<br>";
}
Bei new SimpleXMLElement() Entsteht bei manchen Adressen(Antworten von Google) ein Fehler. z.B. bei dem Suchbegriff Köln... Diesen möchte ich nun mit einer Try Catch anweisung abfangen... Doch meine Versuche schlugen alle Fehl.
Meine Fehlermeldung:
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Opening and ending tag mismatch: SubAdministrativeAreaName line 1 and SubAdministrativeArea in /Applications/xampp/xamppfiles/htdocs/Take2/webseiten/2007/geocode/instantgeotagger.php on line 22
Ich dachte ich habe das letzte mal wirklich einen Fehler in der XML Datei gesehen. Doch wenn ich sie jetzt nocheinmal betrachte finde ich Keinen.
Auch wenn ihr einen Fehler in meinem Code findet wäre es natürlich noch besser.
Ich hoffe Ihr könnt mir dabei helfen.
MFG Explofish
Hi,
Bei new SimpleXMLElement() Entsteht bei manchen Adressen(Antworten von Google) ein Fehler. z.B. bei dem Suchbegriff Köln... Diesen möchte ich nun mit einer Try Catch anweisung abfangen...
Das Vorhaben klingt weniger sinnvoll.
Meine Fehlermeldung:
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Opening and ending tag mismatch: SubAdministrativeAreaName line 1 and SubAdministrativeArea in [...]
Und wie sieht das XML-Dokument aus, bei dem das Auftritt? (relevanter Ausschnitt)
Ich dachte ich habe das letzte mal wirklich einen Fehler in der XML Datei gesehen. Doch wenn ich sie jetzt nocheinmal betrachte finde ich Keinen.
Wenn es bei Suchbegriffen wie Köln auftritt, koennte man leicht ein Encoding-Problem vermuten ...
MfG ChrisB
Hi,
Bei new SimpleXMLElement() Entsteht bei manchen Adressen(Antworten von Google) ein Fehler. z.B. bei dem Suchbegriff Köln... Diesen möchte ich nun mit einer Try Catch anweisung abfangen...
Das Vorhaben klingt weniger sinnvoll.
Da hast du wohl recht
Meine Fehlermeldung:
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Opening and ending tag mismatch: SubAdministrativeAreaName line 1 and SubAdministrativeArea in [...]Und wie sieht das XML-Dokument aus, bei dem das Auftritt? (relevanter Ausschnitt)
<SubAdministrativeArea>
<SubAdministrativeAreaName>Köln</SubAdministrativeAreaName>
<Locality>
<LocalityName>Koln</LocalityName>
</Locality>
</SubAdministrativeArea>
Ich dachte ich habe das letzte mal wirklich einen Fehler in der XML Datei gesehen. Doch wenn ich sie jetzt nocheinmal betrachte finde ich Keinen.
Wenn es bei Suchbegriffen wie Köln auftritt, koennte man leicht ein Encoding-Problem vermuten ...
Wie meinst du das? Google liefert eine Passende Antwort auch bei anderen Städten mit umlauten.
Andere Städte mit umlauten Funktionieren auch
MfG ChrisB
Vielen Dank schonmal für deine Antwort
MFG Explofish
Hi,
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Opening and ending tag mismatch: SubAdministrativeAreaName line 1 and SubAdministrativeArea in [...]
Die Meldung besagt, dass der oeffnende Tag SubAdministrativeAreaName nicht mit dem schliessenden SubAdministrativeArea zusammenpasst -
<SubAdministrativeArea>
<SubAdministrativeAreaName>Köln</SubAdministrativeAreaName>
<Locality>
<LocalityName>Koln</LocalityName>
</Locality>
</SubAdministrativeArea>
Wenn es bei Suchbegriffen wie Köln auftritt, koennte man leicht ein Encoding-Problem vermuten ...
Wie meinst du das?
Wenn das Sonderzeichen ö nicht passend kodiert ist, koennte das dazu fuehren, dass die nachfolgenden Zeichen auch fehlinterpretiert werden - und deshalb </SubAdministrativeAreaName> nicht als Tag, sondern irgendwie als Teil des Inhalts betrachtet wird.
Google liefert eine Passende Antwort auch bei anderen Städten mit umlauten.
Andere Städte mit umlauten Funktionieren auch
Das muss nichts bedeuten - wenn das Sonderzeichen "weiter vorne" steht, bzw. dahinter noch weitere Zeichen kommen, koennte das den Fehler in solchen Faellen nicht auftreten lassen.
Kannst du mal einen URL angeben, unter dem Google dir das besagte liefert?
MfG ChrisB
http://maps.google.com/maps/geo?q=Köln&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Köln - Fehler bei mir
http://maps.google.com/maps/geo?q=Mühldorf&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Mühldorf - Fehler bei mir
http://maps.google.com/maps/geo?q=Rosenheim&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Rosenheim - Funktioniert z.B.
Hinweis: Ich habe einen Anderen API Key benutzt.. Denke nicht dass das einen Unterschied macht.
MFG Explofish
PS: hmmm Wie kann man hier links machen?
Hi,
http://maps.google.com/maps/geo?q=Köln&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Köln - Fehler bei mir
http://maps.google.com/maps/geo?q=Mühldorf&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Mühldorf - Fehler bei mir
Wenn ich die mal mit dem http://www.validome.org/ pruefe, bekomme ich folgenden Fehler (ja, auch der reagiert mit einem Abbruch):
Fatal error: Uncaught exception 'Exception' with message 'NAMEPREP: Prohibited input U+0000003D' in [...]
Sieht also wirklich so aus, als ob da bzgl. der Kodierung was nicht stimmt.
http://maps.google.com/maps/geo?q=Rosenheim&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Rosenheim - Funktioniert z.B.
Der fuehrt zumindest nicht zu einem Abbruch - allerdings enthaelt Rosenheim ja auch auffaellig wenige Umlaute ...
PS: hmmm Wie kann man hier links machen?
</hilfe/bedienung.htm#verweise-einbinden>
MfG ChrisB
echo $begrüßung;
http://maps.google.com/maps/geo?q=Köln&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Köln - Fehler bei mir
http://maps.google.com/maps/geo?q=Mühldorf&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Mühldorf - Fehler bei mir
Wenn ich die mal mit dem http://www.validome.org/ pruefe, bekomme ich folgenden Fehler (ja, auch der reagiert mit einem Abbruch):
Naja, das ist ja auch ein auf HTML spezialisierter und kein allgemeiner XML-Validator. Ich kann an den Originalen keinen Fehler erkennen. Die Dokumente sind UTF-8-kodiert und werden im Vorspann und auch im HTTP-Header als UTF-8-kodiert ausgewiesen.
Das vom OP verwendete utf8_decode() macht daraus ISO-8859-1. Die Deklaration im XML-Vorspann bleibt aber auf UTF-8 stehen. Es ist kein Wunder, dass da der XML-Parser auf die Nase fällt. Es ist empfehlenswert, bei XML generell auf UTF-8 zu bauen und das durchgehend im Projekt zu verwenden. Dann gibt es keine umkodierbedingten Zeichenverluste und die wenigsten Ärgernisse, weil die meisten (alle?) XML-Verarbeitungssoftware UTF-8 als Default eingestellt hat. Will man was andere haben, ist das meist nur mit Extraaufwand verbunden.
echo "$verabschiedung $name";
echo $begrüßung;
http://maps.google.com/maps/geo?q=Köln&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Köln - Fehler bei mir
http://maps.google.com/maps/geo?q=Mühldorf&output=xml&key=ABQIAAAA8zmlKtks6ngA_7uID6-hhhSLI2ysmhyTj8Ly-CHV68o-GAd45hRoNCSXIphMyJz-pWyteR2NHAZcXQ XML Mühldorf - Fehler bei mir
Wenn ich die mal mit dem http://www.validome.org/ pruefe, bekomme ich folgenden Fehler (ja, auch der reagiert mit einem Abbruch):Naja, das ist ja auch ein auf HTML spezialisierter und kein allgemeiner XML-Validator. Ich kann an den Originalen keinen Fehler erkennen. Die Dokumente sind UTF-8-kodiert und werden im Vorspann und auch im HTTP-Header als UTF-8-kodiert ausgewiesen.
Das vom OP verwendete utf8_decode() macht daraus ISO-8859-1. Die Deklaration im XML-Vorspann bleibt aber auf UTF-8 stehen. Es ist kein Wunder, dass da der XML-Parser auf die Nase fällt. Es ist empfehlenswert, bei XML generell auf UTF-8 zu bauen und das durchgehend im Projekt zu verwenden. Dann gibt es keine umkodierbedingten Zeichenverluste und die wenigsten Ärgernisse, weil die meisten (alle?) XML-Verarbeitungssoftware UTF-8 als Default eingestellt hat. Will man was andere haben, ist das meist nur mit Extraaufwand verbunden.
echo "$verabschiedung $name";
Hmmmm... wie kann ich das utf-8 XML mit php lesen und in variablen schreiben?
Hast du vll ein paar nützliche links für mich?
Vielen dank schomal
MFG Explofish
echo $begrüßung;
Hmmmm... wie kann ich das utf-8 XML mit php lesen und in variablen schreiben?
Du musst nur aus deinem Ausgangsposting-Code die utf8_decode-Zeile weglassen. Dann bleibt das als UTF-8-kodiert deklarierte XML auch in dieser Kodierung.
Du könntest nun aber, nach der Verarbeitung durch SimpleXML, Probleme beim Einfügen in deine bereits bestehende und vermutlich ISO-8859-1-kodierte Webseite bekommen. Eine Lösung wäre, komplett auf UTF-8 umzustellen. Das ist teilweise recht herausfordernd, weil du nun sämtliche Beteiligte auf UTF-8 umstellen musst. Ein einfacher aber nicht sehr eleganter Weg ist der Einsatz der Funktion htmlentities() mit 'UTF-8' als drittem Parameter. UTF-8 _nicht_ zu verwenden führt zu Folgefehlern, wenn jemand auf deiner Webseite Zeichen eingibt, die in ISO-8859-1 nicht enthalten sind. Der Browser weiß dann nicht, in welcher Kodierung er dir das Zeichen zusenden soll und reagiert ungenormt.
Hast du vll ein paar nützliche links für mich?
Haufenweise. Wofür konkret?
echo "$verabschiedung $name";
echo $begrüßung;
Hmmmm... wie kann ich das utf-8 XML mit php lesen und in variablen schreiben?
Du musst nur aus deinem Ausgangsposting-Code die utf8_decode-Zeile weglassen. Dann bleibt das als UTF-8-kodiert deklarierte XML auch in dieser Kodierung.
Du könntest nun aber, nach der Verarbeitung durch SimpleXML, Probleme beim Einfügen in deine bereits bestehende und vermutlich ISO-8859-1-kodierte Webseite bekommen. Eine Lösung wäre, komplett auf UTF-8 umzustellen. Das ist teilweise recht herausfordernd, weil du nun sämtliche Beteiligte auf UTF-8 umstellen musst. Ein einfacher aber nicht sehr eleganter Weg ist der Einsatz der Funktion htmlentities() mit 'UTF-8' als drittem Parameter. UTF-8 _nicht_ zu verwenden führt zu Folgefehlern, wenn jemand auf deiner Webseite Zeichen eingibt, die in ISO-8859-1 nicht enthalten sind. Der Browser weiß dann nicht, in welcher Kodierung er dir das Zeichen zusenden soll und reagiert ungenormt.
Hast du vll ein paar nützliche links für mich?
Haufenweise. Wofür konkret?
echo "$verabschiedung $name";
Vielen Dank schonmal für deine Erklärung.
Nun habe ich die Konvertierung aus meinem Code entfernt. Nun Funktionieren Alle Adresse ohne umlaute. Und alle mit nicht!
Die Fehlermeldung:
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xF6 0x6C 0x6E 0x3C
Hast du vielleicht für dieses Problem eine lösung
echo $begrüßung;
Hmmmm... wie kann ich das utf-8 XML mit php lesen und in variablen schreiben?
Du musst nur aus deinem Ausgangsposting-Code die utf8_decode-Zeile weglassen. Dann bleibt das als UTF-8-kodiert deklarierte XML auch in dieser Kodierung.
Du könntest nun aber, nach der Verarbeitung durch SimpleXML, Probleme beim Einfügen in deine bereits bestehende und vermutlich ISO-8859-1-kodierte Webseite bekommen. Eine Lösung wäre, komplett auf UTF-8 umzustellen. Das ist teilweise recht herausfordernd, weil du nun sämtliche Beteiligte auf UTF-8 umstellen musst. Ein einfacher aber nicht sehr eleganter Weg ist der Einsatz der Funktion htmlentities() mit 'UTF-8' als drittem Parameter. UTF-8 _nicht_ zu verwenden führt zu Folgefehlern, wenn jemand auf deiner Webseite Zeichen eingibt, die in ISO-8859-1 nicht enthalten sind. Der Browser weiß dann nicht, in welcher Kodierung er dir das Zeichen zusenden soll und reagiert ungenormt.
Hast du vll ein paar nützliche links für mich?
Haufenweise. Wofür konkret?
echo "$verabschiedung $name";
Vielen Dank schonmal für deine Erklärung.
Nun habe ich die Konvertierung aus meinem Code entfernt. Nun Funktionieren Alle Adresse ohne umlaute. Und alle mit nicht!
Die Fehlermeldung:
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xF6 0x6C 0x6E 0x3CHast du vielleicht für dieses Problem eine lösung
Ok Danke für eure Hilfe... Ich hätte noch ein bisschen überlegen Sollen^^
Ich habe Das Problem mit utf8_encode() Gelößt!
VIELEN DANK!