Question htmlentities () vs htmlspecialchars ()


Quelles sont les différences entre htmlspecialchars() et htmlentities(). Quand devrais-je utiliser l'un ou l'autre?


483
2017-09-05 18:29


origine


Réponses:


De la documentation PHP pour htmlentities:

Cette fonction est identique à htmlspecialchars() de toutes les manières, sauf avec htmlentities(), tous les caractères qui ont des équivalents d'entités de caractères HTML sont traduits dans ces entités.

De la documentation PHP pour htmlspecialchars:

Certains caractères ont une signification particulière en HTML et devraient être représentés par des entités HTML s'ils veulent conserver leur signification. Cette fonction renvoie une chaîne avec certaines de ces conversions effectuées; les traductions effectuées sont les plus utiles pour la programmation web de tous les jours. Si vous souhaitez que toutes les entités de caractères HTML soient traduites, utilisez htmlentities() au lieu.

La différence est ce qui est encodé. Les choix sont tout (entités) ou tout moins les caractères "spéciaux", comme les esperluettes, les guillemets doubles et simples, inférieurs et supérieurs à (specialchars).

Je préfère utiliser htmlspecialchars dès que possible.


292
2017-09-05 18:31



htmlspecialchars peut être utilisé:

  1. Quand il n'y a pas besoin d'encoder tous les caractères qui ont leurs équivalents HTML.

    Si vous savez que l'encodage de la page correspond aux symboles spéciaux du texte, pourquoi utiliseriez-vous htmlentities? htmlspecialchars est beaucoup plus simple, et produit moins de code à envoyer au client.

    Par exemple:

    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;.
    //                ^                 ^
    

    Le second est plus court et ne pose aucun problème si le jeu de caractères ISO-8859-1 est défini.

  2. Lorsque les données seront traitées non seulement via un navigateur (pour éviter de décoder les entités HTML),

  3. Si la sortie est XML (voir la réponse d'Artefacto).


356
2017-09-01 01:00



Car:

  • Parfois, vous écrivez des données XML et vous ne pouvez pas utiliser d'entités HTML dans un fichier XML.
  • Car htmlentities substitue plus de caractères que htmlspecialchars. Ceci est inutile, rend le script PHP moins efficace et le code HTML résultant moins lisible.

htmlentities n'est nécessaire que si vos pages utilisent des encodages tels que ASCII ou LATIN-1 au lieu de UTF-8 et que vous manipulez des données avec un encodage différent de celui de la page.


86
2017-09-01 00:57



Ceci est encodé avec htmlentities.

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

"& <>
    ¡¢ £ ¤ ¥ | § ¨ ª «¬ ¯ ° ± ² ³ 'μ ¶ · º ¹ ļ» ¼ ½ ¾ ¿À Á Â Ã Ä Å Æ Ç É É É É   I I I I D S O O O O O × Ø × × × × Ý Þ ß Â Â Â Â Â Â æ c E E E E I I I I D n o o o o ö ÷ ø ü ü ü ü ý þ ÿ Œ   œ S S Ÿ ƒ ~ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ   υ φ χ ψ ω θ Υ π - - « » « », « † ‡ • ... ‰ '" <> ~ / € ℑ ℘ ℜ ℵ ← ↑ → ↓ ↵ ⇐ ⇑ ⇒ ⇓ ⇔   ∀ ∂ ∃ ∅ ∇ ∈ ∉ ∋ Π Σ - * √ α ∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ~ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ ⋅ ⌈ ⌉ ⌊ ⌋ ⟨   ⟩ ◊

Ceci est encodé avec htmlspecialchars.

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

"& <>


74
2018-06-22 12:48



Tu devrais utiliser htmlspecialchars($strText, ENT_QUOTES) quand vous voulez juste que votre chaîne soit XML et HTML sûre:

Par exemple, encoder

  • & vers & amp;
  • "à"
  • <à & lt;
  • > à & gt;
  • ' à '

Cependant, si vous avez aussi des caractères supplémentaires Unicode ou des symboles inhabituels dans votre texte, vous devez utiliser htmlentities () pour vous assurer qu'ils apparaissent correctement dans votre page HTML.

Remarques:

  • 'sera seulement codé par htmlspecialchars () à' si l'option ENT_QUOTES est transmise. 'est plus sûr d'utiliser alors & apos; les anciennes versions d'Internet Explorer ne prenant pas en charge les & apos; entité.
  • Techniquement,> n'a pas besoin d'être codé selon la spécification XML, mais il est généralement codé aussi pour la cohérence avec l'exigence de <être codé.

15
2017-08-22 18:38



Je viens de découvrir à propos de la get_html_translation_table fonction. Vous le passez HTML_ENTITIES ou HTML_SPECIALCHARS et il renvoie un tableau avec les caractères qui seront codés et comment ils seront codés.


13
2018-04-06 17:38



htmlspecialchars () fait le minimum d'encodage pour s'assurer que votre chaîne n'est pas analysée en HTML. Cela laisse votre chaîne plus lisible par les humains que si vous utilisiez htmlentities () pour encoder absolument tout ce qui a un encodage.


10
2017-09-01 00:58



htmlentities - Convertit tous les caractères applicables en entités HTML.

htmlspecialchars - Convertit les caractères spéciaux en entités HTML.

Les traductions effectuées caractères de traduction sur le ci-dessous:

  • '&' (esperluette) devient '& amp;'
  • '"' (double guillemet) devient" & quot; " lorsque ENT_NOQUOTES n'est pas défini.
  • "'" (guillemet simple) devient' '' (ou & apos) uniquement lorsque ENT_QUOTES est activé.
  • '<' (inférieur à) devient '& lt;'
  • '>' (supérieur à) devient '& gt;'

Vous pouvez vérifier le code suivant pour plus d'informations sur htmlentities et htmlspecialchars:

https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b


7
2018-05-11 03:05



Vous voulez probablement utiliser un encodage de caractères Unicode, par exemple UTF-8et htmlspecialchars. Parce qu'il n'y a pas tout besoin de générer des "entités HTML" pour "tous les caractères applicables" (c'est ce que fait htmlentities selon la documentation) s'il est déjà dans votre jeu de caractères.


5
2017-09-05 18:39