StixT: Verständnisfrage zu htmlspecialchars

Hallo an alle Leser,

in einer MySQL DB sind Daten wie ID, Name und Beschreibung mehrerer Bilder vorhanden. Nach einer abfrage werden die vorher genannten Daten in einer PHP Datei mit echo und htmlspecialchars / ENT_QUOTES ausgegeben. Mit diesem Funktionsaufruf werden die HTML Tags zwar angezeigt (soll auch so sein) aber nicht interpretiert bzw. ausgeführt.

Jetzt ist es aber so, dass man in die Bildbeschreibungen auch Urls eingeben kann:

Beispiel: http://www.example.com

Diese Urls sollen demnach als funktionsfähige Links gelten, also Anklickbar sein.

Meine Vorstellung wäre, dass vor der Ausgabe erst der gesamte Text mit htmlspecialchars / ENT_QUOTES umgeschrieben wird:

Beispiel: $bg_row[3] = htmlspecialchars($bg_row[3], ENT_QUOTES);

Dann mit preg_replace_callback nach http:// bzw. https:// gesucht, sowie bei Fund der oder die regulären Ausdrücke ersetzt werden.

Erst danach erfolgt die Ausgabe mit echo htmlspecialchars($bg_row[3], ENT_QUOTES);

Wäre das die richtige Anwendung?

Danke schon mal im Voraus für eure Antworten!

MfG,

StixT

  1. Hallo,

    Meine Vorstellung wäre, dass vor der Ausgabe erst der gesamte Text mit htmlspecialchars / ENT_QUOTES umgeschrieben wird:

    Beispiel: $bg_row[3] = htmlspecialchars($bg_row[3], ENT_QUOTES);

    Dann mit preg_replace_callback nach http:// bzw. https:// gesucht, sowie bei Fund der oder die regulären Ausdrücke ersetzt werden.

    Erst danach erfolgt die Ausgabe mit echo htmlspecialchars($bg_row[3], ENT_QUOTES);
    Wäre das die richtige Anwendung?

    das /kann/ man so machen, zumindest ist damit sichergestellt, dass kein HTML unkontrolliert in die Ausgabe gelangt. Das setzt aber voraus, dass deine Content-Lieferanten die URLs auch ordentlich eingeben - also mit Protokoll-Präfix, an dem man sie erkennen kann. Wenn also jemand eingibt, "habe ich auf maps.google.com gefunden", wird das vermutlich nicht als URL erkannt und verlinkt.

    Müssen denn URLs im Fließtext vorkommen? Ist das gewünscht? Falls nein, wäre ein separates Feld dafür natürlich sauberer.

    Oder magst du den Leuten die Eingabe von BB-Code zumuten? Dann könnte zumindest jeder selbst bestimmen, was verlinkt werden soll und was nicht; und auch URLs in unvollständiger Schreibweise könnten berücksichtigt werden.

    So long,
     Martin

    --
    Ein Theoretiker ist ein Mensch, der praktisch nur denkt.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin,

      vielen, vielen Dank für Deine umfangreiche Antwort!

      Das setzt aber voraus, dass deine Content-Lieferanten die URLs auch ordentlich eingeben - also mit Protokoll-Präfix, an dem man sie erkennen kann.

      Die Content-Lieferanten werden, bevor diese auch nur ein Wort in die DB schreiben können, auf Linksetzungen hingewiesen. Sollte also jemand das Bedürfnis verspüren einen Link zu setzen, dann sind die Präfixe http:// oder https:// Voraussetzung.

      Wenn also jemand eingibt, "habe ich auf maps.google.com gefunden", wird das vermutlich nicht als URL erkannt und verlinkt.

      Das ist richtig, demnach auch so beabsichtigt! Es gibt User die gerne nach einem Komma oder Punkt ohne Leerzeichen direkt Weiterschreiben, entweder weil so gewollt oder aus Sparsamkeit.

      Beispiel 1: Mit "www.example.com" sind Sie stark!
      Dies konnte gewollt sein, da eine Linksetzung hier noch nicht erwünscht ist!

      Beispiel 2 (schon öfters in Gästebüchern gesehen): HeLeute,eure Webseite ist echt klasse.Wollte das nur mal sagen!

      Mit den vorangestellten Präfix http:// oder https:// hätte das Script wenigstens einen Anhaltspunkt um darauf reagieren zu können. Man muss jetzt nur noch mit einer function die Zeichenkette am Ende der URL finden, die nicht zur URL gehört.

      Müssen denn URLs im Fließtext vorkommen? Ist das gewünscht? Falls nein, wäre ein separates Feld dafür natürlich sauberer.

      Ja, das wird so gewünscht. Ein separates Feld fällt daher definitiv weg.

      Oder magst du den Leuten die Eingabe von BB-Code zumuten? Dann könnte zumindest jeder selbst bestimmen, was verlinkt werden soll und was nicht; und auch URLs in unvollständiger Schreibweise könnten berücksichtigt werden.

      Eingabe von BB-Code hatte ich zuerst auch in Betracht gezogen. Da aber die DB weitestgehend von Code befreit sein soll (zwecks Aufblähung und Übersicht), habe ich davon Abstand genommen.

      MfG,

      StixT