Was sind die Unterschiede zwischen htmlspecialchars()
y htmlentities()
. Wann sollte ich das eine oder das andere verwenden?
Antworten
Zu viele Anzeigen?htmlspecialchars
verwendet werden können:
-
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: <Il était une fois un être>. // ^^^^^^^^ ^^^^^^^ echo htmlspecialchars('<Il était une fois un être>.'); // Output: <Il était une fois un être>. // ^ ^
Die zweite ist kürzer und verursacht keine Probleme, wenn der Zeichensatz ISO-8859-1 eingestellt ist.
-
Wenn die Daten nicht nur über einen Browser verarbeitet werden (um die Entschlüsselung von HTML-Entitäten zu vermeiden),
-
Wenn die Ausgabe XML ist (siehe die Antwort von Artefacto ).
Aus der PHP-Dokumentation für htmlentities :
Diese Funktion ist identisch mit
htmlspecialchars()
in jeder Hinsicht, außer beihtmlentities()
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: <Il était une fois un être>.
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^ ^
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 ) ) )
:
" & < >
Weil:
- Manchmal schreibt man XML-Daten und kann keine HTML-Entities in einer XML-Datei verwenden.
- Denn
htmlentities
ersetzt mehr Zeichen alshtmlspecialchars
. 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.
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.
- See previous answers
- Weitere Antworten anzeigen