Bademeister: Hin und zurück (htmlspecialchars-mysql_real_escape_string)

Beitrag lesen

Ich glaube, jetzt verstehe ich das. Also liefern die beiden Funktionen völlig unabhängig voneinander denselben String ab, nur für unterschiedliche Empfänger und eben in deren Interpretationsweise.

An dieser Stelle kommt man nicht drumrum, zwischen dem String und seinen Literalen zu unterscheiden. Die beiden Funktionen geben (im PHP-Kontext) natürlich verschieden Strings zurück. Und zwar Strings, die in der jeweiligen Sprache das Literal desselben Strings "Peter O'Donnel" sind.

Die Zeichenkette, die uns interessiert (in meinem obigen Beispiel), ist und bleibt immer die Zeichenkette "Peter O'Donnel".
Wenn wir diesen Namen in der Datenbank speichern, dann wollen wir in der Datenbank - klar - exakt "Peter O'Donnel" stehen haben.
Wenn wir den Namen in einem HTML-Dokument ausgeben wollen, dann soll in dem Dokument (nicht im HTML-Quellcode, sondern im Dokument!) auch exakt die Zeichenkette "Peter O'Donnel" stehen.
Wenn wir ihn in ein PDF-Dokument schreiben wollen, dann soll.... genau. Und so weiter.

Also gehen wir her und generieren *zu dem Zeitpunkt*, zu dem wir den String "Peter O'Donnel" in einer bestimmten Sprache (SQL, HTML,...) beschreiben müssen, das entsprechende Literal dieses Strings. In der Datenbank aber hat nichts anderes als exakt der originäre String "Peter O'Donnel" etwas zu suchen. Denn die Datenbank hat nicht zu entscheiden, ob wir den String später in ein HTML-Dokument oder ein PDF-Dokument oder ein Word-Dokument schreiben oder vielleicht auch nur mit einer User-Eingabe vergleichen oder sonst was damit machen wollen.

Aber der String bleibt immer derselbe und wird nur zur Übergabe kodiert, um, einmal angekommen, wieder er selbst und unverändert zu sein?

Ganz genau.

Viele Grüße,
der Bademeister