htmlentities() frente a htmlspecialchars()

Resuelto Eric Hogue asked hace 54 años • 11 respuestas

¿Cuáles son las diferencias entre htmlspecialchars()y htmlentities(). ¿Cuándo debo usar uno u otro?

Eric Hogue avatar Jan 01 '70 08:01 Eric Hogue
Aceptado

htmlspecialcharspuede ser usado:

  1. Cuando no es necesario codificar todos los caracteres que tienen sus equivalentes HTML.

    Si sabe que la codificación de la página coincide con los símbolos especiales del texto, ¿por qué utilizaría htmlentities? htmlspecialcharses mucho más sencillo y produce menos código para enviar al cliente.

    Por ejemplo:

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

    El segundo es más corto y no causa ningún problema si está configurado el juego de caracteres ISO-8859-1.

  2. Cuando los datos serán procesados ​​no sólo a través de un navegador (para evitar decodificar entidades HTML),

  3. Si la salida es XML (ver la respuesta de Artefacto ).

Arseni Mourzenko avatar Sep 01 '2010 01:09 Arseni Mourzenko

De la documentación PHP para htmlentities :

Esta función es idéntica htmlspecialchars()en todos los aspectos, excepto con htmlentities(), todos los caracteres que tienen equivalentes de entidades de caracteres HTML se traducen a estas entidades.

De la documentación de PHP para htmlspecialchars :

Ciertos caracteres tienen un significado especial en HTML y deben representarse mediante entidades HTML para preservar sus significados. Esta función devuelve una cadena con algunas de estas conversiones realizadas; las traducciones realizadas son las más útiles para la programación web cotidiana. Si necesita que se traduzcan todas las entidades de caracteres HTML, utilice htmlentities()en su lugar.

La diferencia es lo que se codifica. Las opciones son todo (entidades) o caracteres "especiales", como ampersand, comillas dobles y simples, menor que y mayor que (caracteres especiales).

Prefiero usarlo htmlspecialcharssiempre que sea posible.

Por ejemplo:

    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;.
    //                ^                 ^
Thomas Owens avatar Sep 05 '2008 18:09 Thomas Owens

Esto se está codificando con htmlentities.

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

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

Esto se está codificando con htmlspecialchars.

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

" & < >

Berky avatar Jun 22 '2014 12:06 Berky

Porque:

  • A veces estás escribiendo datos XML y no puedes usar entidades HTML en un archivo XML.
  • Porque htmlentitiessustituye más caracteres que htmlspecialchars. Esto es innecesario, hace que el script PHP sea menos eficiente y el código HTML resultante sea menos legible.

htmlentitiessolo es necesario si tus páginas usan codificaciones como ASCII o LATIN-1 en lugar de UTF-8 y estás manejando datos con una codificación diferente a la de la página.

Artefacto avatar Sep 01 '2010 00:09 Artefacto