htmlentities() vs. htmlspecialchars()

Lesezeit: 6 Minuten

htmlentities vs htmlspecialchars
Eric Hoge

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

1646958848 811 htmlentities vs htmlspecialchars
Arseni Murzenko

htmlspecialchars könnte genutzt werden:

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

    Wenn Sie wissen, dass die Seitencodierung mit den Textsonderzeichen übereinstimmt, warum sollten Sie sie verwenden htmlentities? htmlspecialchars ist viel unkomplizierter und erzeugt weniger Code, der an den Client 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;.
    //                ^                 ^
    

    Der 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 Dekodierung von HTML-Einheiten zu vermeiden),

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

  • htmlspecialchars($str, ENT_QUOTES, “UTF-8”) ist am besten, wenn Sie eine frühere PHP-Version als 5.4 verwenden. ENT_QUOTES ist ein Muss, um einfache Anführungszeichen zu codieren.

    – Tarik

    25. Dezember 2015 um 21:41 Uhr

htmlentities vs htmlspecialchars
Thomas Owens

Aus der PHP-Dokumentation für htmlentitäten:

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

Aus der PHP-Dokumentation für htmlSonderzeichen:

Bestimmte Zeichen haben in HTML eine besondere Bedeutung und sollten durch HTML-Entitäten dargestellt werden, wenn sie ihre Bedeutung bewahren sollen. Diese Funktion gibt eine Zeichenfolge mit einigen dieser vorgenommenen Konvertierungen zurück; die angefertigten Übersetzungen sind diejenigen, die für die tägliche Webprogrammierung am nützlichsten sind. Wenn alle HTML-Zeicheneinheiten übersetzt werden müssen, verwenden Sie htmlentities() stattdessen.

Der Unterschied besteht darin, was verschlüsselt wird. Zur Auswahl stehen alles (Entitäten) oder “Sonderzeichen”, wie kaufmännisches Und, doppelte und einfache Anführungszeichen, kleiner als und größer als (Sonderzeichen).

nutze ich lieber htmlspecialchars wenn 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;.
    //                ^                 ^

  • Vielen Dank für die Antwort, aber würden Sie etwas näher erläutern, was Sie bevorzugen htmlspecialchars() wann immer möglich, abgesehen von den offensichtlichen Unterschieden? Welche Situationen werden verwendet htmlentities() verursachen Sie Probleme, während htmlspecialchars() wird nicht?

    – MikeSchinkel

    15. November 2011 um 19:28 Uhr

  • Ich bin gerade auf ein Problem gestoßen, weil ich htmlentities anstelle von htmlspecialchars verwendet habe! Wenn Ihre Site UTF8-codiert ist, werden Sonderzeichen wie ¡™£¢∞§¶ zu kleinen schwarzen Rauten mit Fragezeichen darin, weil htmlentities nicht weiß, wie sie damit umgehen sollen, htmlspecialchars jedoch schon.

    – Darius

    27. Mai 2012 um 8:13 Uhr

  • @Darius Was du sagst macht keinen Sinn. htmlentities und htmlspecialchars können beide UTF-8 verarbeiten, solange Sie dies angeben "UTF-8" für das dritte Argument.

    – Artefakt

    27. Mai 2012 um 13:03 Uhr

  • Ab PHP 5.4 ist UTF-8 die Standardkodierungsoption (drittes Argument).

    – Jonathan

    19. März 2013 um 15:23 Uhr

  • @Darius: Wir sind auf etwas Ähnliches gestoßen. Wie wir verwenden Sie wahrscheinlich PHP, das älter als 5.4.0 ist. Aus Jonathans Kommentar schließend, müssen wir also UTF-8 explizit wie folgt angeben: htmlentities($str, ENT_QUOTES, ‘UTF-8’);

    – Rinogo

    10. April 2013 um 1:43 Uhr

1646958849 28 htmlentities vs htmlspecialchars
Berki

Dies wird mit codiert htmlentities.

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

” & < >
¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Œ œ Š š Ÿ ƒ ˆ ˜ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ τ Ω θ υ π – – ”, “” † ‡ • … ‰ ‘”<> ~ / € ℑ ℘ ℜ ‰ ℵ ← ↑ → ↓ ↔ ↵ ⇐ ⇑ ⇒ ⇓ ⇔ ∀ ∂ ∃ ∅ ∇ ∈ ∉ ∋ π Σ – * √ α ∞ ∞ ∠ ∨ ∩ ∪ ∫ ∴ ∴ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ◊ ◊ ⌉ ⌊ ♦ ♦⟩ ◊ ♠ ♣ ♥ ♦ ♦

Dies wird mit codiert htmlspecialchars.

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

” & < >

  • In acht nehmen! Auf den ersten Blick sieht htmlentities ziemlich vollständig aus. Aber es fehlen ein paar wirklich grundlegende und gebräuchliche Charaktere (insbesondere wenn Ihre Kunden MS mögen). Intelligente Anführungszeichen (z. B. ‘ oder ’), Bindestriche (z. B. — oder &mdash), Markenzeichen (™ oder ™) und viele andere führen dazu, dass null zurückgegeben wird.

    – Jonathan Lidbeck

    16. Oktober 2014 um 4:29 Uhr


  • @Jonathan die sind in der Liste. Wenn Sie ein leeres Ergebnis erhalten, haben Sie wahrscheinlich die Codierung falsch angegeben.

    – Artefakt

    16. März 2015 um 16:19 Uhr

  • Oder Sie haben die Codierung nicht angegeben und sich auf die Standardeinstellung verlassen, die sich in PHP 5.4 und dann (möglicherweise) erneut in PHP 5.6 geändert hat, abhängig von Ihrer Konfiguration. Bis 2012 hat die Dokumentation nicht einmal empfohlen, den Parameter anzugeben. Also, wenn Sie das nicht angegeben haben Optional dritter Parameter und aktualisiertes PHP, htmlentities verwendeten zuerst ISO-8859-1, dann UTF-8, dann alles, was in Ihrer php.ini steht, ohne einen Fehler bei irgendwelchen Problemen auszulösen, sondern stattdessen leise nichts zurückzugeben. Dies kann natürlich niemals irgendwann zu Datenverlust führen!

    – Aaa

    8. Juli 2017 um 19:46 Uhr


  • Was in diesen Listen nicht gezeigt wird, ist (1) dass beide Funktionen Leerzeichen codieren (als %20) und (2) dass Sie ein Flag (ENT_QUOTES) setzen können, sodass sie auch einfache Anführungszeichen codieren.

    – Jeremy Jung

    30. August 2020 um 15:17 Uhr

htmlentities vs htmlspecialchars
Artefakt

Weil:

  • Manchmal schreiben Sie XML-Daten und können keine HTML-Entitäten in einer XML-Datei verwenden.
  • Weil 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 erforderlich, wenn Ihre Seiten Codierungen wie ASCII oder LATIN-1 anstelle von UTF-8 verwenden und Sie Daten mit einer anderen Codierung als der der Seite verarbeiten.

1646958849 366 htmlentities vs htmlspecialchars
Kmeixner

Du solltest benutzen htmlspecialchars($strText, ENT_QUOTES) wenn Sie nur möchten, dass Ihre Zeichenfolge XML- und HTML-sicher ist:

Zum Beispiel codieren

  • & bis &
  • ” bis “
  • < bis <
  • > zu >
  • ‘ bis '

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

Anmerkungen:

  • ‘ wird nur von htmlspecialchars() zu ' wenn die Option ENT_QUOTES übergeben wird. ' ist dann sicherer zu verwenden ' da ältere Versionen von Internet Explorer das ' juristische Person.
  • Technisch gesehen muss > nicht gemäß der XML-Spezifikation kodiert werden, aber es wird normalerweise auch kodiert, um der Anforderung zu entsprechen, dass < kodiert wird.

  • Die Frage ist: Da mein Text vom Benutzer bereitgestellt wird, weiß ich nicht, ob ich Unicode oder ungewöhnliche Symbole darin habe. Warum sollte ich in diesem Fall htmlspecialchars verwenden?

    – EKanadily

    2. August 2016 um 12:29 Uhr

1646958850 661 htmlentities vs htmlspecialchars
Großvogel

htmlspecialchars () führt die minimale Codierung aus, um sicherzustellen, dass Ihre Zeichenfolge nicht als HTML geparst wird. Dadurch bleibt Ihre Zeichenfolge für Menschen lesbarer als bei Verwendung htmlentities () absolut alles zu codieren, was eine Codierung hat.

  • Die Frage ist: Da mein Text vom Benutzer bereitgestellt wird, weiß ich nicht, ob ich Unicode oder ungewöhnliche Symbole darin habe. Warum sollte ich in diesem Fall htmlspecialchars verwenden?

    – EKanadily

    2. August 2016 um 12:29 Uhr

1646958850 461 htmlentities vs htmlspecialchars
Ry-

Ich habe gerade von der erfahren get_html_translation_table Funktion. Sie passieren es HTML_ENTITIES oder HTML_SPECIALCHARS und es gibt ein Array mit den Zeichen zurück, die codiert werden, und wie sie codiert werden.

  • Dies ist nützlich, wenn Sie Ihre eigene Funktion erstellen möchten, z. B. um einige zusätzliche Zeichen zu ersetzen oder andere magische Dinge zu tun.

    – Jochem Kuijpers

    24. Februar 2013 um 0:04 Uhr

989400cookie-checkhtmlentities() vs. htmlspecialchars()

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

Privacy policy