Wie kann man HTML sicher aus einem PHP-Programm ausgeben?

Lesezeit: 2 Minuten

Benutzeravatar von user198729
Benutzer198729

Wenn man diesen Job in PHP macht, kann man auf diese Art von Problem stoßen:

<span title="<?php echo $variable;?>">...

Das Problem ist, wenn $variable enthält doppelte Anführungszeichen, sollte geändert werden in \"

Und das ist noch nicht die ganze Geschichte:

<span title="<?php echo $variable;?>">...

In diesem Fall müssen wir einfache Anführungszeichen in ändern \'aber lassen Sie doppelte Anführungszeichen unverändert.

Darüber hinaus können Variablenwerte spitze Klammern < und > enthalten, die HTML stören.

Wie können wir also die Ausgabe für HTML sicher umgehen?

Benutzeravatar von Dominic Rodger
Dominik Rodger

Sie möchten immer Dinge innerhalb von HTML-Attributen HTML-codieren, was Sie tun können htmlspecialchars:

<span title="<?php echo htmlspecialchars($variable); ?>">

Wahrscheinlich möchten Sie den zweiten Parameter ($quote_style) Zu ENT_QUOTES.

Das einzige potenzielle Risiko ist das $variable möglicherweise bereits codiert, so dass Sie dürfen den letzten Parameter setzen möchten ($double_encode) Zu false.

  • Bestätigt mit HTML5-Spezifikationen hier: stackoverflow.com/questions/5320177/…

    – e-motiv

    31. Januar 2014 um 23:46 Uhr

  • +1 für die Erwähnung von “ENT_QUOTES”. Ich habe diese Funktion bereits verwendet, aber doppelte Anführungszeichen würden den HTML-Code durcheinander bringen.

    – danielson317

    17. August 2017 um 16:55 Uhr

  • Beachten Sie, dass ENT_QUOTES immer noch Fehler in Javascript innerhalb von HTML verursacht:

    – Leigh Bicknell

    14. März 2019 um 11:27 Uhr

  • @LeighBicknell Ich denke, es ist besser zu tun htmlspecialchars(json_encode($variable), ENT_QUOTES). Ich habe es in Ihrem speziellen Beispiel nicht getestet, aber ich denke, es sollte für jede Art von Wert gut funktionieren.

    – frodeborli

    25. März 2021 um 12:11 Uhr

  • Seit PHP8.1 ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ist der Standardwert.

    – Tobias K.

    28. November 2022 um 14:50 Uhr

  • Nun, bevor Sie Text in HTML ausgeben, sollten Sie ihn mit maskieren htmlspecialchars(). Stellen Sie also sicher, dass das (doppelte) Anführungszeichen korrekt geändert wird.

    Achten Sie auf den zweiten Parameter dieser Funktion.

    Das Bat-Tool verfügt über eine StringTool::htmlAttributes ( $arrayOfAttributes )-Methode, die diese Aufgabe ebenfalls erfüllt.

    https://github.com/lingtalfi/Bat/blob/master/StringTool.php

    1449300cookie-checkWie kann man HTML sicher aus einem PHP-Programm ausgeben?

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy