• Hallo zusammen,
    wie einige von euch schon wissen, versuche ich noch immer ein Script zu erstellen, das mir eine Adresse aus einer DB ausliest, diese an Google Maps schickt und sie dann geparst entgegennimmt und in einer Karte wiedergibt.


    Die ist mir auch schon teilweise gelungen. D.h. bei den meisten Adressen funktioniert folgendes Script fehlerfrei:



    Bei manchen Adressen funktioniert das allerdings gar nicht. Dort wird mir eine Seitenlange Fehlermeldung ausgegeben:
    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 92: parser error : Opening and ending tag mismatch: LocalityName line 1 and Locality in C:...
    Anfangs dachte ich dies habe etwas mit den Umlauten zu tun, kann aber nicht sein, da auch viele Adressen mit Umlauten angezeigt werden.
    Nun habe ich erfahren, dass eine mögliche Erklärung für das ganze Parserfehler beim Abarbeiten der Konstruktorfunktion der SimpleXMLElement-Klasse sein können, die durch fehlerhafter Codepage-Definitionen hervorgerufen werden.
    Kann mir jemand sagen was das ist bzw was ich an diesen ändern muss, um endlich auch die letzten Adressen fehlerfrei angezeigt zu bekommen?


  • Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 92: parser error : Opening and ending tag mismatch: LocalityName line 1 and Locality in C:...


    Liest sich eher wie ein Zeichensatzproblem - probier mal,

    PHP
    1. $adresse = urlencode(utf8_encode($adresse));

    quo errat demonstrator

  • Danke für deine Antwort, leider hat sich nur die Fehlermeldung verändert:


    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xFF 0x3F 0x73 0x74 in C:\xampp\htdocs\studio-check_final\studiodetails.php on line 93


    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.0"><Response><name>Schlo in C:\xampp\htdocs\studio-check_final\studiodetails.php on line 93


    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in C:\xampp\htdocs\studio-check_final\studiodetails.php on line 93


    Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\xampp\htdocs\studio-check_final\studiodetails.php:93 Stack trace: #0 C:\xampp\htdocs\studio-check_final\studiodetails.php(93): SimpleXMLElement->__construct('<?xml version="...') #1 {main} thrown in C:\xampp\htdocs\studio-check_final\studiodetails.php on line 93



    Allerdings habe ich bei mir alles auf utf-8 gestellt, verstehe also nicht warum das ganze überhaupt decodiert werden muss...

  • Dann kommt folgende Fehlermeldung:


    Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xDF 0x65 0x20 0x33 in C:\xampp\htdocs\studio-check_final\studiodetails.php on line 95
    Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\xampp\htdocs\studio-check_final\studiodetails.php:95 Stack trace: #0 C:\xampp\htdocs\studio-check_final\studiodetails.php(95): SimpleXMLElement->__construct('<?xml version="...') #1 {main} thrown in C:\xampp\htdocs\studio-check_final\studiodetails.php on line 95

  • Die Fehlermeldung ist doch absolut eindeutig:

    PHP
    1. Input is not proper UTF-8


    Google erwartet hier UTF-8 kodierte Strings, Du lieferst aber etwas anderes.
    Sorge dafür, dass Google, wie angekündigt auch utf8 bekommt oder deklariere das XML-Dokument entsprechend dem Zeichensatz, in dem es erstelllt ist (ISO-8859-1 ?). Das ist alles.

  • Der Zeichensatz ist bei mir überall auf utf-8 bzw. utf-8_unicode_ci gestellt. Zumindest denke ich, dass es überall der Fall ist. Wie bzw. wo kann ich also dafür sorgen, dass Google utf-8 erhält?
    Das einzige was bei mir glaube ich aus dem Rahmen fällt ist dass ich Umlaute in meiner DB maskiert drinstehen habe. Frag bitte nicht wie das gekommen ist, diese Einstellungen hatte ich am Anfang einfach so übernommen.

  • Ob utf8_decode oder utf8_encode, ich verstehe nicht wieso ich diese überhaupt verwenden muss, da sie ja nichts anderes machen als iso in utf-8 umwandeln und umgekehrt. Da ich aber eigentlich kein iso verwende, wieso brauche ich das dann überhaupt?
    Ich weiß jetzt auch nicht, was ich genau ändern muss: Liegt es an meinem Script das ich ändern muss/kann oder an den fälschlicherweise maskierten Umlauten, die in meiner DB stehen?
    Zugegebenermaßen bin ich ein bisschen verwirrt was das ganze angeht :eek:

  • So ich glaube das ist die richtige Anwendung von en- und decode:

    PHP
    1. $adresse = utf8_encode($adresse);
    2. $adresse = urlencode($adresse);
    3. $url=sprintf("http://maps.google.com/maps/geo?q=%s&output=xml&key=%s", $adresse, $key);


    Allerdings muss ich dem Script noch sagen, was $adresse ist, dass es also die Adressdaten aus der DB zieht. Das hatte in der alten Form noch der sprintf erledigt.
    So habe ich es jetzt probiert, funktioniert aber nicht:

    PHP
    1. $adresse = $row_Detailabfrage_1['strasse'].$row_Detailabfrage_1['plz'].$row_Detailabfrage_1['ort'];
    2. $adresse = utf8_encode($adresse);
    3. $adresse = urlencode($adresse);


    Könnt ihr mir bitte sagen, was da nicht stimmt?

  • Hallo, gestern habe ich jetzt mein Script so hingekriegt, dass es auf meinem lokalen Server läuft:


    So werden wirklich alle Adressen geparst und die Karte tatsächlich angezeigt.
    Heut früh wollte ich das ganze dann frohgemut auf meinen Webspace spielen, und dort bekam ich dann folgende Fehlermeldung:


    Fatal error: Cannot instantiate non-existent class: simplexmlelement in /homepages/2/d215824754/htdocs/studiodetails.php on line 82


    In Zeile 82 steht:

    PHP
    1. $xml = new SimpleXMLElement($urlinhalt);


    Bitte helft mir, ich geh sonst noch kaputt...caipi caipi caipi