602 Stimmen

htmlentities() vs. htmlspecialchars()

Was sind die Unterschiede zwischen htmlspecialchars() y htmlentities() . Wann sollte ich das eine oder das andere verwenden?

399voto

Arseni Mourzenko Punkte 47813

htmlspecialchars verwendet werden können:

  1. Wenn es nicht notwendig ist, alle Zeichen zu kodieren, die ihre HTML-Entsprechung haben.

    Wenn Sie wissen, dass die Seitenkodierung mit den speziellen Textsymbolen übereinstimmt, warum sollten Sie die htmlentities ? htmlspecialchars ist viel unkomplizierter und erzeugt weniger Code, der an den Kunden gesendet werden muss.

    Zum Beispiel:

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^
    
    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^

    Die zweite ist kürzer und verursacht keine Probleme, wenn der Zeichensatz ISO-8859-1 eingestellt ist.

  2. Wenn die Daten nicht nur über einen Browser verarbeitet werden (um die Entschlüsselung von HTML-Entitäten zu vermeiden),

  3. Wenn die Ausgabe XML ist (siehe die Antwort von Artefacto ).

393voto

Thomas Owens Punkte 110966

Aus der PHP-Dokumentation für htmlentities :

Diese Funktion ist identisch mit htmlspecialchars() in jeder Hinsicht, außer bei htmlentities() werden alle Zeichen, die HTML-Zeichenäquivalente haben, in diese Entitäten übersetzt.

Aus der PHP-Dokumentation für htmlspecialchars :

Bestimmte Zeichen haben in HTML eine besondere Bedeutung und sollten durch HTML-Entities dargestellt werden, wenn sie ihre Bedeutung behalten sollen. Diese Funktion gibt eine Zeichenkette zurück, in der einige dieser Konvertierungen vorgenommen wurden; die vorgenommenen Übersetzungen sind diejenigen, die für die alltägliche Webprogrammierung am nützlichsten sind. Wenn Sie möchten, dass alle HTML-Zeichen übersetzt werden, verwenden Sie htmlentities() stattdessen.

Der Unterschied besteht darin, was kodiert wird. Zur Auswahl stehen alles (Entities) oder "besondere" Zeichen wie Ampersand, doppelte und einfache Anführungszeichen, kleiner als und größer als (Specialchars).

Ich bevorzuge die Verwendung von htmlspecialchars wann immer möglich.

Zum Beispiel:

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^

    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^

111voto

Berky Punkte 1181

Dies wird verschlüsselt mit htmlentities .

implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) ) :

" & < >
¡ ¢ £ ¤ ¥ ¦ § ¨ © ª " ¬ ® ¯ ° ± ² ³ ' µ ¶ - ¸ ¹ º " ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Œ œ Š š Ÿ ƒ ˆ ˜ - - ' ' ' " " " † ‡ - ‰ ' ' € ™

Dies wird verschlüsselt mit htmlspecialchars .

implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) ) :

" & < >

100voto

Artefacto Punkte 93200

Weil:

  • Manchmal schreibt man XML-Daten und kann keine HTML-Entities in einer XML-Datei verwenden.
  • Denn htmlentities ersetzt mehr Zeichen als htmlspecialchars . Dies ist unnötig, macht das PHP-Skript weniger effizient und den resultierenden HTML-Code weniger lesbar.

htmlentities ist nur notwendig, wenn Ihre Seiten Kodierungen wie ASCII oder LATIN-1 anstelle von UTF-8 verwenden und Sie Daten mit einer anderen Kodierung als die der Seite verarbeiten.

20voto

Kmeixner Punkte 1534

Sie sollten Folgendes verwenden htmlspecialchars($strText, ENT_QUOTES) wenn Sie nur wollen, dass Ihre Zeichenkette XML- und HTML-sicher ist:

Zum Beispiel kodieren

  • & bis &
  • " zu "
  • < bis <
  • > bis >
  • ' zu '

Wenn Sie jedoch auch zusätzliche Zeichen haben, die Unicode oder ungewöhnliche Symbole in Ihrem Text haben, sollten Sie htmlentities() verwenden, um sicherzustellen, dass sie in Ihrer HTML-Seite korrekt angezeigt werden.

Anmerkungen:

  • ' wird von htmlspecialchars() nur dann in ' kodiert, wenn die Option ENT_QUOTES übergeben wird. ' ist sicherer zu verwenden, da ältere Versionen des Internet Explorers die ' Entität nicht unterstützen.
  • Technisch gesehen muss > nicht gemäß der XML-Spezifikation kodiert werden, wird aber aus Gründen der Konsistenz mit der Anforderung, < zu kodieren, in der Regel ebenfalls kodiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X