Melina: Htmlspecialchars

Hallo,

ich verwende für die Ausgabe htmlspecialchars damit wird allerdings auch kein <strong> ausgeführt. Wie kann ich es nun erreichen, dass bestimmte Befehle ausgeführt werden? Kann man htmlspecialchars Ausnahmen hinzufügen?

  1. Aloha ;)

    ich verwende für die Ausgabe htmlspecialchars damit wird allerdings auch kein <strong> ausgeführt. Wie kann ich es nun erreichen, dass bestimmte Befehle ausgeführt werden?

    Zuerst htmlspecialchars draufwerfen und danach per str_replace alle "&lt;strong&gt;" durch "<strong>" und "&lt;/strong&gt;" durch "</strong>". Auch wenn mir dafür kein sinnvoller Usecase einfallen mag.

    Kann man htmlspecialchars Ausnahmen hinzufügen?

    Nö, imho nicht. Warum auch? Es wird ja kein einziges Tag ersetzt sondern lediglich bestimmte Sonderzeichen.

    Grüße,

    RIDER

    P.S. @Gunnar Bittersmann: Ja, ja, Gunnar, die Kätzchen. Wörtlich übersetzt sind Specialchars aber Sonderzeichen :P

    --
    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
    ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
    1. Hallo,

      P.S. @Gunnar Bittersmann: Ja, ja, Gunnar, die Kätzchen. Wörtlich übersetzt sind Specialchars aber Sonderzeichen :P

      ja, hier ist der Begriff "Sonderzeichen" auch völlig korrekt. Die Zeichen, um die es geht, _sind_ ja tatsächlich Zeichen mit einer besonderen Bedeutung in HTML. :-)

      Ciao,
       Martin

      --
      Niemand lebt allein von seinen Träumen.
      Aber wer träumt, lebt noch.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. @@Der Martin:

        nuqneH

        P.S. @Gunnar Bittersmann: Ja, ja, Gunnar, die Kätzchen. Wörtlich übersetzt sind Specialchars aber Sonderzeichen :P

        ja, hier ist der Begriff "Sonderzeichen" auch völlig korrekt. Die Zeichen, um die es geht, _sind_ ja tatsächlich Zeichen mit einer besonderen Bedeutung in HTML. :-)

        Eben. Wenn das *in diesem Kontext* keine Sonderzeichen wären, müssten sie ja für diesen Kontext nicht escapet werden.

        Über verschiedene Kontexte hinweg würde ich glatt sagen, dass ASCII-Zeichen weitaus häufiger als Nicht-ASCII-Zeichen Sonderzeichen sind.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Hallo

    ich verwende für die Ausgabe htmlspecialchars damit wird allerdings auch kein <strong> ausgeführt.

    Warum auch? Wenn du HTML-Tags mit htmlspecialchars behandelst, dann soll die Funktion auch bitte tun, was sie tun soll. Was das ist, hat Camping_RIDER schon geschrieben und das ist genau das, was du beobachtest.

    Wie kann ich es nun erreichen, dass bestimmte Befehle ausgeführt werden? Kann man htmlspecialchars Ausnahmen hinzufügen?

    Erst einmal zur zweiten Frage: nein. Nun zur ersten. Da du keine Ausnahmen machen kannst, musst du die Reihenfolge der Funktionsabläufe überdenken. Wenn du deinen Text zuerst entschärfst (htmlspecialchars) und erst dann deine gewünschten Elemente (hier „strong“) hinzufügst, werden die auch funktionieren. Wie das konkret zu lösen ist, weiß nur jemand mit der Kenntnis des konkreten Codes, also du. Oder du zeigst uns den Code, damit wir dir helfen können. :-)

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
    Veranstaltungsdatenbank Vdb 0.3
    1. Hallo Auge,

      Erst einmal zur zweiten Frage: nein. Nun zur ersten. Da du keine Ausnahmen machen kannst, musst du die Reihenfolge der Funktionsabläufe überdenken. Wenn du deinen Text zuerst entschärfst (htmlspecialchars) und erst dann deine gewünschten Elemente (hier „strong“) hinzufügst, werden die auch funktionieren. Wie das konkret zu lösen ist, weiß nur jemand mit der Kenntnis des konkreten Codes, also du. Oder du zeigst uns den Code, damit wir dir helfen können. :-)

      mein Code sieht so aus :)

      <?php echo nl2br($ausgabe['inhalt']); ?>

      Vor hatte ich noch die htmlspecialchars drin

      <?php echo nl2br(htmlspecialchars($ausgabe['inhalt'])); ?>

      In meiner Datenbank steht es so:

      <strong>Hallo Test</strong>

      Nehme ich den Code ohne htmlspecialchars wird es richtig ausgeführt, nehme ich den Code mit htmlspecialchars wird mein <strong> als Text ausgegeben.

      1. Hallo

        mein Code sieht so aus :)

        <?php echo nl2br($ausgabe['inhalt']); ?>

        Vor hatte ich noch die htmlspecialchars drin

        <?php echo nl2br(htmlspecialchars($ausgabe['inhalt'])); ?>

        In meiner Datenbank steht es so:

        <strong>Hallo Test</strong>

        *Das* ist der Fehler.

        Nehme ich den Code ohne htmlspecialchars wird es richtig ausgeführt, nehme ich den Code mit htmlspecialchars wird mein <strong> als Text ausgegeben.

        Logisch. Die Funktion tut, wie ihr gehießen. Sie maskiert, wenn vorhanden, „<“ und „>“. Dein Problem ist, dass du deinen Text an einer ungünstigen Stelle mit den *ausschließlich für die HTML-Ausgabe* nötigen Elementen versiehst.

        Würdest du den Text in der Datenbank z.B. mit BB-Code oder Markdown lagern und ihn erst bei der Ausgabe mit den im Zielsystem (hier HTML) nötigen Formatierungen versehen, könntest du auch erst etwaige unerwünschte HTML-Elemente abfangen (htmlspecialchars) und dann die gewünschten Elemente einfügen. Das wäre eine Umwandlung der „Lagerungssyntax“ (z.B. eben BB-Code) in HTML oder was auch immer im Zielsystem richtig ist. Der Text könnte ja auch woanders ausgegeben werden.

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
      2. Tach!

        Vor hatte ich noch die htmlspecialchars drin
        <?php echo nl2br(htmlspecialchars($ausgabe['inhalt'])); ?>
        In meiner Datenbank steht es so:
        <strong>Hallo Test</strong>

        Wenn du HTML in der Datenbank stehen haben möchtest, dann musst das bereits fertiges HTML sein. Wenn dieser HTML-Code noch zusammengbaut werden muss, dann muss zum Zeitpunkt des Zusammenbaus der Kontextwechsel berücksichtigt werden.

        Wenn allerdings nur halbfertiges HTML in die Datenbank soll, muss auch dieses halbfertige HTML bereits ordentlich formatiert sein. Lediglich die Platzhalter müssen das nicht, denn die werden ja noch ausgetauscht. Und dabei musst du dann beachten, was eingefügt werden soll. Sind es Daten, müssen diese behandelt werden, ist es weiterer HTML-Code, dann nicht. Aber dann muss der wiederum fertig sein.

        Kurzfassung: Wenn die Daten in einen anderen Kontext gebracht werden, müssen sie behandelt werden - genau zu diesem Zeitpunkt.

        dedlfix.