uepselon: Auto umwandlung von Sonderzeichen?

Hallo,

ich habe ein kleines Problem mit php. Und zwar hab ich in einem String bestimmte Werte , unter anderem auch < > " usw.
Diese erstze ich mit einer Funktion in < > und "
Der String wird in eine XML Datei abgespreichert und soweit ist auch alles korrekt, lese ich nun diese Datei wieder ein, und lasse sie mit dem in PHP integrierten XML Parser wieder ausgeben, macht er mir aus &gt wieder > und aus " wieder ein ". Warum das denn?
Wird das automatisch vom Parser umgewandelt?

Das ist nämlich dumm, denn wenn im String ein &lt tag > steht, wird dieser später als <tag> in der xml datei gespeichert und bringt die ganze Striktur durcheinander.

Gibt es ein Lösungsmöglichkeit?

Gruß

ueps

  1. ich habe ein kleines Problem mit php. Und zwar hab ich in einem String bestimmte Werte , unter anderem auch < > " usw.
    Diese erstze ich mit einer Funktion in < > und "
    Der String wird in eine XML Datei abgespreichert und soweit ist auch alles korrekt, lese ich nun diese Datei wieder ein, und lasse sie mit dem in PHP integrierten XML Parser wieder ausgeben, macht er mir aus &gt wieder > und aus " wieder ein ". Warum das denn?

    Weil < ein < und > ein > darstellt. Der XML-Parser gibt Dir natürlich nicht die rohen XML-Daten zurück, sondern die echten, dekodierten. Genausowenig zeigt Dir Dein Webbrowser doch das ü eines HTML-Dokuments an, er zeigt das ü.

    Merke:

    • Wenn Du in einer XML-Datei das Zeichen < speichern möchtest, dann musst Du < schreiben (genauso wie in HTML).

    • Wenn Du in einer XML-Datei den Text < speichern möchtest, dann musst Du &lt; schreiben (genauso wie in HTML).

    Anders geht's nicht, weil < und > XML-Steuerzeichen sind und somit für Normalgebrauch maskiert werden müssen. Zum Einleiten einer Maskierung benutzt man das Und-Zeichen (&), d.h. auch das & ist ein Steuerzeichen und muß, wenn es für sich selbst stehen soll, ebenfalls maskiert werden.

    Gruß,
      soenk.e

    1. Hi

      Weil < ein < und > ein > darstellt. Der XML-Parser gibt Dir natürlich nicht die rohen XML-Daten zurück, sondern die echten, dekodierten. Genausowenig zeigt Dir Dein Webbrowser doch das ü eines HTML-Dokuments an, er zeigt das ü.

      Das ist ja mal dumm, der Parser sollte die Werte in den Tags so lassen wie sie da drin stehn. Ich hab da mal ein wenig rumprobiert und nun schaffe ich es um ein < in der XML Datei als < zu schreiben, hohle ich den Wert (also <) aus dem XML File mittels Parser ist es ja theoretisch, wieder ein <. Nun mach ich einfach nochmal ein htmlentities($value) und alles wird gut.

      Doch es sind neue Probs aufgetaucht, ist ein ö im String wird zwar der Wert &oumlt; ins XML File gespeichert, nur der Parser hat gewaltige Probleme das File richtig zu Parsen, bei " < > gehts aber ohne Probleme, nur bei öäü und ß nicht.

      An was liegt das schonwieder?

      Gruß

      ueps

      1. Weil < ein < und > ein > darstellt. Der XML-Parser gibt Dir natürlich nicht die rohen XML-Daten zurück, sondern die echten, dekodierten. Genausowenig zeigt Dir Dein Webbrowser doch das ü eines HTML-Dokuments an, er zeigt das ü.

        Das ist ja mal dumm, der Parser sollte die Werte in den Tags so lassen wie sie da drin stehn.

        Tut er ja auch. > stellt in XML das Zeichen > dar, dann muß der Parser doch wohl auch ein > zurückliefern und nicht irgendeine interne Kodierung.

        Direkt gefragt: Welchen Sinn soll es haben, wenn Du aus der XML-Datei nicht das wieder rausbekommst, was Du vorher reingeschrieben hast? Was ist so wichtig daran, auf für den reingeschriebenen Text "Berlin->Hamburg" "Berlin->Hamburg" rauszubekommen?

        Doch es sind neue Probs aufgetaucht, ist ein ö im String wird zwar der Wert &oumlt; ins XML File gespeichert, nur der Parser hat gewaltige Probleme das File richtig zu Parsen, bei " < > gehts aber ohne Probleme, nur bei öäü und ß nicht.

        An was liegt das schonwieder?

        Das ö ist kein Steuerzeichen und muß nicht maskiert werden. Benutze statt htmlentities() htmlspecialchars().

        Gruß,
          soenk.e

        1. Hi,

          Das ö ist kein Steuerzeichen und muß nicht maskiert werden. Benutze statt htmlentities() htmlspecialchars().

          Danke werd ich mal versuchen,
          hab auber auch so eine Lösung hinbekommen, in dem ich ein wenig mit & getrickst hab.

          Gruß

          ueps