Daniel Petratsch: Zeichenmaskierung utf8 -> html entities -> utf8

Hallo,

Der Titel ist zwar nicht ganz so optimal gewählt, aber ich versuchs mal so.
Meine Frage ist folgende:

Ich habe eine utf-8 codierte Datenbank in der die Umlaute nicht konvertiert(also ganz normal) gespeichert werden. Wenn ich nun diese Daten auslese und bspw. in ein Textfeld zum Bearbeiten ausgebe, muss ich natürlich mittels htmlspecialchars() dafür sorgen, dass nicht evtl. vorkommende Html-Tags für eine fehlerhafte Ausgabe sorgen, d.h.

<input type="text".... value="Er nannte sich "Peter"" />

wird umgewandelt in

<input type="text".... value="Er nannte sich &quot;Peter&quot;" />

Sollte dieser geänderte Wert nun wieder in die DB zurück sind jetzt natürlich alle Sonderzeichen als Html-Entity gespeichert was aber nicht sein soll. D.h. ich muss diese Zeichen wieder alle rückwandeln. Gibt es dafür eine Funktion die das erledigt oder würde es ausreichen die entsprechenden Tags (&#039; &quot; &amp; &lt; &gt;) manuell zu ersetzen?

freundliche Grüße,
Daniel

  1. Hallo,

    Gibt es dafür eine Funktion die das erledigt oder würde es ausreichen die entsprechenden Tags (&#039; &quot; &amp; &lt; &gt;) manuell zu ersetzen?

    schau mal unter http://de2.php.net/manual/en/function.html-entity-decode.php.

    Ciao,
    Andreas

    --
    "No, Sir, I don't like it." - (Mr. Horse)
    1. Moin!

      Gibt es dafür eine Funktion die das erledigt oder würde es ausreichen die entsprechenden Tags (&#039; &quot; &amp; &lt; &gt;) manuell zu ersetzen?

      schau mal unter http://de2.php.net/manual/en/function.html-entity-decode.php.

      Das ist unnötig, weil keine Entities zurückkommen! Bzw. WENN Entities zurückkommen, wurden die auch so eingegeben, und würden durch Anwendung dieser Funktion zerstört.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
  2. hi,

    Sollte dieser geänderte Wert nun wieder in die DB zurück sind jetzt natürlich alle Sonderzeichen als Html-Entity gespeichert

    Nein, sind sie nicht.

    Der Browser findet &lt; in der Textarea oder dem Value eines Input-Feldes - er stellt es als < dar, er schickt es als < ab.

    Falls du dennoch "Entities" bekommst, dann hast du etwas falsch gemacht - beispielsweise dem Browser nicht explizit mitgeteilt, in welcher Kodierung du Formulardaten empfangen willst (accept-charset) - so dass er sich u.U. eine nimmt, in der er gewisse Zeichen nicht darstellen kann, und sich dann genötigt sieht, dir diese als Entities oder nummerische Zeichenreferenzen zu übermitteln.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi wahsaga,

      Sollte dieser geänderte Wert nun wieder in die DB zurück sind jetzt natürlich alle Sonderzeichen als Html-Entity gespeichert

      Nein, sind sie nicht.

      Der Browser findet &lt; in der Textarea oder dem Value eines Input-Feldes - er stellt es als < dar, er schickt es als < ab.

      Falls du dennoch "Entities" bekommst, dann hast du etwas falsch gemacht - beispielsweise dem Browser nicht explizit mitgeteilt, in welcher Kodierung du Formulardaten empfangen willst (accept-charset) - so dass er sich u.U. eine nimmt, in der er gewisse Zeichen nicht darstellen kann, und sich dann genötigt sieht, dir diese als Entities oder nummerische Zeichenreferenzen zu übermitteln.

      Stimmt, der Bowser wandelt die Entities tatsächlich wieder in das Originalformat zurück, ich dachte immer der Wert wird 1:1 so abgesendet wie er im Quelltext vorkommt - das wäre in diesem Falle recht unpraktisch.
      Haut jedenfalls so super hin, danke für die Antwort! (natürlich auch an die anderen Poster :) )

      freundliche Grüße,
      Daniel