¿Cuándo se deben usar entidades HTML?

115

Esto me ha estado confundiendo durante algún tiempo. Con la llegada de UTF-8 como el estándar de facto en el desarrollo web, no estoy seguro en qué situaciones se supone que debo usar las entidades HTML y para cuáles debo usar el carácter UTF-8. Por ejemplo,

  • em guión (-, &emdash;)
  • ampersand (&, &)
  • 3/4 fracción (¾, ¾)

Por favor, arroje luz sobre este tema. Será apreciado.

allesklar
fuente
En una nota al margen, ¿qué hará htmlentities () en PHP?
Joe Phillips
Leyendo las respuestas y comentarios me parece que aún no existe una regla universal a favor de uno u otro, y la respuesta aún es que depende .
Majid Fouladpour

Respuestas:

76

Por lo general, no es necesario utilizar entidades de caracteres HTML si su editor admite Unicode. Las entidades pueden resultar útiles cuando:

  • Su teclado no admite el carácter que necesita escribir. Por ejemplo, muchos teclados no tienen em-dash o el símbolo de copyright.
  • Su editor no es compatible con Unicode (muy común hace algunos años, pero probablemente no hoy).
  • Quieres que sea explícito en la fuente lo que está sucediendo. Por ejemplo, el  código es más claro que el carácter de espacio en blanco correspondiente.
  • Es necesario para escapar caracteres especiales HTML como <, &o ".
JacquesB
fuente
1
Muy útil. Gracias. Utilizo un programa útil para obtener personajes inusuales. Se llama popchar y está hecho por Ergonis, pero es solo para OS X.
allesklar
3
Nota &nbsp;al margen : Wikipedia todavía exige en lugar del carácter de espacio en blanco real, en parte porque Firefox convierte U + 00A0 en U + 0020 en formas. Entonces, usar la entidad en ese caso es la única manera de garantizar que la fuente no se estropee cada vez que un usuario de Firefox la edite.
Joey
2
Un buen resumen, pero con respecto al último punto, es <que a menudo es necesario escapar, nunca >(y "solo rara vez se necesita escapar dentro de los valores de los atributos).
Jukka K. Korpela
Otro motivo para mantener & nbsp; es para que pueda mostrar varios espacios en una página HTML.
zylstra
Entonces &amp;, ¿ debería usarse siempre en lugar de &? ¿Hay alguna razón para esto?
Prometheus
116

Basándome en los comentarios que he recibido, analicé esto un poco más. Parece que actualmente la mejor práctica es renunciar al uso de entidades HTML y usar el carácter UTF-8 real en su lugar . Las razones enumeradas son las siguientes:

  1. Las codificaciones UTF-8 son más fáciles de leer y editar para aquellos que entienden lo que significa el carácter y saben cómo escribirlo.
  2. Las codificaciones UTF-8 son tan ininteligibles como las codificaciones de entidades HTML para aquellos que no las entienden, pero tienen la ventaja de ser representadas como caracteres especiales en lugar de codificaciones hexadecimales o decimales difíciles de entender.

Siempre que la codificación de su página esté configurada correctamente en UTF-8, debe usar el carácter real en lugar de una entidad HTML. Leí varios documentos sobre este tema, pero los más útiles fueron:

Del artículo UTF-8: El secreto de la codificación de caracteres :

Wikipedia es un gran caso de estudio para una aplicación que originalmente usaba ISO-8859-1 pero cambió a UTF-8 cuando se volvió demasiado engorroso para admitir idiomas extranjeros. Los bots ahora revisarán los artículos y convertirán las entidades de personajes en sus personajes reales correspondientes en aras de la facilidad de uso y la capacidad de búsqueda .

Ese artículo también ofrece un buen ejemplo sobre la codificación china. Aquí está el ejemplo abreviado por el bien de la pereza:

UTF-8:

這兩個字是甚麼意思

Entidades HTML :

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

Las codificaciones de entidad UTF-8 y HTML no tienen sentido para mí, pero al menos la codificación UTF-8 es reconocible como un idioma extranjero y se representará correctamente en un cuadro de edición. El artículo continúa diciendo lo siguiente sobre la versión codificada por entidad HTML:

Extremadamente inconveniente para aquellos de nosotros que realmente sabemos qué son las entidades de carácter, ¡totalmente ininteligible para los usuarios pobres que no lo saben! Incluso las entidades de caracteres "inteligibles", un poco más fáciles de usar, como & theta; dejará rascándose la cabeza a los usuarios que no están interesados ​​en aprender HTML. Por otro lado, si ven θ en un cuadro de edición, sabrán que es un carácter especial y lo tratarán en consecuencia, incluso si no saben cómo escribir ese carácter ellos mismos.

Como han señalado otros, todavía tiene que usar entidades HTML para caracteres XML reservados (ampersand, menor que, mayor que).

William Brendel
fuente
Esta respuesta ayuda enormemente. Pero para aclarar, para mi propia comprensión: no hay nada riesgoso o inválido en el uso de &entity;sintaxis dentro de un documento HTML con un juego de caracteres UTF-8 declarado, ¿correcto? Si bien los caracteres UTF-8 simples son mejores por las razones que ha enumerado, no hay ningún problema en tener algunas entidades HTML junto a ellas en el mismo documento.
Jacob Ford
@JacobFord Correcto, mezclar entidades HTML con caracteres UTF-8 no es riesgoso ni inválido, solo puede confundir a alguien que lea la fuente.
William Brendel
5

No usaría UTF-8 para caracteres que se confunden visualmente con facilidad. Por ejemplo, es difícil distinguir un emdash de un menos, o especialmente un espacio que no se rompe de un espacio. Para estos personajes, definitivamente usa entidades.

Para los caracteres que se entienden fácilmente visualmente (como los ejemplos chinos anteriores), use UTF-8 si lo desea.

Ned Batchelder
fuente
5

Personalmente, hago todo en utf-8 desde hace mucho tiempo, sin embargo, en una página html, siempre es necesario convertir los símbolos de unión (&), caracteres mayores que (>) y menores que (<) a sus entidades equivalentes, & amp ;, & gt; y & lt;

Además, si tiene la intención de realizar alguna programación utilizando texto utf-8, hay algunas cosas que debe tener en cuenta.

  • XML necesita algunas líneas adicionales para validar cuando se utilizan entidades.
  • Algunas bibliotecas no funcionan bien con utf-8. Por ejemplo, PHP en algunas distribuciones de Linux eliminó el soporte completo para utf-8 en sus bibliotecas de expresiones regulares.
  • Es más difícil limitar la cantidad de caracteres en un texto que usa entidades html, porque una sola entidad usa muchos caracteres. Además, siempre existe el riesgo de reducir la entidad a la mitad.
Marco Luglio
fuente
Es un punto muy menor, pero no hay ningún requisito para codificar mayor que (>), solo menor que (<).
Codemonkey
4

Las entidades pueden comprarle compatibilidad con clientes con muerte cerebral que no entienden las codificaciones correctamente. No creo que eso incluya los navegadores actuales, pero nunca se sabe qué otros tipos de programas pueden estar afectando.

Más útil, sin embargo, es que las entidades HTML lo protegen de sus propios errores: si configura incorrectamente algo en el servidor y termina sirviendo una página con un encabezado HTTP que dice que es ISO-8859-1y una METAetiqueta que dice que es UTF-8, al menos su & mdash; es siempre funcionará.

Jim Puls
fuente
5
Sin embargo, podrías hacer el argumento opuesto: &mdash muestra correctamente, incluso si los encabezados están mal configurados, es más difícil detectar que hay un problema.
Pekka
4

Las entidades HTML son útiles cuando desea generar contenido que se incluirá (dinámicamente) en páginas con (varias) codificaciones diferentes. Por ejemplo, tenemos contenido de etiqueta blanca que se incluye en páginas web codificadas con ISO-8859-1 y UTF-8 ...

Si la conversión del conjunto de caracteres de / a UTF-8 no fuera un lío tan grande y poco confiable (siempre se tropieza con algunos caracteres y algunas herramientas que no se convierten correctamente), la estandarización en UTF-8 sería el camino a seguir.

mjy
fuente
2

Si sus páginas están codificadas correctamente en utf-8, no debería necesitar entidades html, solo use los caracteres que desee directamente.

Otávio Décio
fuente
3
Creo que aún los necesitará para codificar los caracteres reservados.
rmeador
@rmeador - Estoy de acuerdo con eso.
Otávio Décio
2

Todas las respuestas anteriores tienen sentido para mí.

Además: depende principalmente del editor que intente utilizar y del idioma del documento. Como requisito mínimo para el editor es que sea compatible con el idioma del documento. Eso significa que, si su texto está en japonés, tenga cuidado con el uso de un editor que no los muestre (es decir, sin entidades para el documento en sí). Si es en inglés, incluso puede usar un editor antiguo similar a vim y usar entidades solo para el relativo rara vez & copy; y amigos. Por supuesto: & gt; para> y otros HTML-specials todavía necesitan escapes. Pero incluso con los otros idiomas latin-1 (alemán, francés, etc.) escribir ä es un fastidio, ya sabes dónde ...

Además, personalmente escribo entidades para caracteres invisibles y aquellos que tienen un aspecto similar al ascii estándar y, por lo tanto, se confunden fácilmente. Por ejemplo, hay u1173 (que parece un guión en algunos juegos de caracteres) o u1175, que se parece a la barra vertical. Usaría entidades para esos en cualquier caso.

blabla999
fuente
& gt; NO es necesario para>, solo puede usar>. & lt; Sin embargo, es necesario para <.
Codemonkey