Bianca: htmlspecialchars

Hallo,

hier im Forum lese ich immer wieder, vor jede Ausgabe sollte / muss htmlspecialchars geschrieben werden. Soweit so gut. Was ist aber in folgendem Fall:

 if ($object->ArtikelStatus == 3) {
        $StatusInfo= str_replace ("3", "<span class=\"neu\">Artikel wurde noch nicht vollständig ins System übernommen!</span>", $object->ArtikelStatus);
  }

Die Ausgabe im Dokument

<?php echo htmlspecialchars($StatusInfo); ?>

Als Ausgabe erhalte ich den ganzen HTML Krempel, also nicht dieses was ich möchte. Sollte ich in diesem Fall auf htmlspecialchars verzichten, oder kann man htmlspecialchars auch Ausnahmen hinzufügen?

  1. Hi,

    hier im Forum lese ich immer wieder, vor jede Ausgabe sollte / muss htmlspecialchars geschrieben werden.

    im Prinzip ja, aber es gibt Ausnahmen. ;-)

    Soweit so gut. Was ist aber in folgendem Fall:

     if ($object->ArtikelStatus == 3) {
            $StatusInfo= str_replace ("3", "<span class=\"neu\">Artikel wurde noch nicht vollständig ins System übernommen!</span>", $object->ArtikelStatus);
      }
    

    Die Ausgabe im Dokument

    <?php echo htmlspecialchars($StatusInfo); ?>
    

    Als Ausgabe erhalte ich den ganzen HTML Krempel, also nicht dieses was ich möchte. Sollte ich in diesem Fall auf htmlspecialchars verzichten, oder kann man htmlspecialchars auch Ausnahmen hinzufügen?

    In diesem Fall willst du ja gerade HTML-Code ausgeben, der Zweck von htmlspecialchars() ist aber doch, Ausgaben so zu maskieren, dass sie nicht als HTML interpretiert werden, sondern als Klartext.

    Ich vermute aber, dass man deine Struktur und Programmlogik besser, "sauberer" realisieren könnte, so dass diese Ambiguität gar nicht erst entsteht. Dass kann ich aber ohne Kenntnis der Gesamtstruktur nicht mit Sicherheit sagen.

    So long,
     Martin

  2. Liebe Bianca,

    hier im Forum lese ich immer wieder, vor jede Ausgabe sollte / muss htmlspecialchars geschrieben werden.

    nein, so absolut formuliert halte ich das für ein Verständnisproblem.

    Soweit so gut.

    Eben nicht. Für eine Aussage á la "htmlspechialchars verwenden" gehört ein Kontext: Wann, wie und wo brauchst Du warum diese Funktion?

    <?php echo htmlspecialchars($StatusInfo); ?>
    

    Als Ausgabe erhalte ich den ganzen HTML Krempel, also nicht dieses was ich möchte.

    Logisch! Wenn Du HTML-Code durch diese Funktion schleust, dann wird der für den HTML-Kontext kodiert, damit Du im Dokument genau den Code lesen kannst.

    Aber das willst Du nicht. Du hast einen anderen Kontext: Der Code soll genau so an den Browser gesendet werden. Also darfst Du hier kein htmlspecialchars benutzen.

    Sollte ich in diesem Fall auf htmlspecialchars verzichten, oder kann man htmlspecialchars auch Ausnahmen hinzufügen?

    Du solltest verstehen, wann Du wo und warum diese Funktion benötigst. Dazu sei Dir der Artikel Kontextwechsel im hiesigen Wiki empfohlen. Dann verstehst Du auch, was die von Dir eingangs zitierte Funktion soll und wann man sie wirklich warum benötigt.

    Liebe Grüße,

    Felix Riesterer.