htmlentities() frente a htmlspecialchars()
¿Cuáles son las diferencias entre htmlspecialchars()
y htmlentities()
. ¿Cuándo debo usar uno u otro?
htmlspecialchars
puede ser usado:
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
?htmlspecialchars
es mucho más sencillo y produce menos código para enviar al cliente.Por ejemplo:
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>. // ^ ^
El segundo es más corto y no causa ningún problema si está configurado el juego de caracteres ISO-8859-1.
Cuando los datos serán procesados no sólo a través de un navegador (para evitar decodificar entidades HTML),
Si la salida es XML (ver la respuesta de Artefacto ).
De la documentación PHP para htmlentities :
Esta función es idéntica
htmlspecialchars()
en todos los aspectos, excepto conhtmlentities()
, 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 htmlspecialchars
siempre que sea posible.
Por ejemplo:
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>.
// ^ ^
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 ) ) )
:
" & < >
Porque:
- A veces estás escribiendo datos XML y no puedes usar entidades HTML en un archivo XML.
- Porque
htmlentities
sustituye más caracteres quehtmlspecialchars
. Esto es innecesario, hace que el script PHP sea menos eficiente y el código HTML resultante sea menos legible.
htmlentities
solo 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.