2009-01-12 23 views
91

Esto me ha estado confundiendo por algún tiempo. Con el advenimiento de UTF-8 como el estándar de facto en el desarrollo web, no estoy seguro de en qué situaciones se supone que debo usar las entidades html y para cuáles debería usar el carácter UTF-8.Cuándo se deben usar las entidades HTML

Ejemplos: guión largo, signo, etc.

Por favor, no arrojan luz sobre este tema. Será apreciado.

+0

En una nota aparte, ¿qué harán htmlentities() en PHP? –

+0

Al leer las respuestas y los comentarios me parece que todavía no hay una regla universal a favor de uno u otro, y la respuesta todavía es * depende *. –

Respuesta

63

Generalmente, no es necesario que use entidades de caracteres HTML si su editor admite Unicode. Las entidades pueden ser ú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).
  • Desea 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.
  • Debe escapar caracteres especiales HTML como <, & o ".
+1

Muy útil. Gracias. Utilizo un programa útil para obtener caracteres inusuales. Se llama popchar y está hecho por Ergonis, pero es solo para OS X. – allesklar

+3

Nota al margen: Wikipedia sigue mandando ' ' en lugar del carácter de espacio en blanco real, en parte porque Firefox convierte U + 00A0 en U + 0020 en formularios. Entonces, usar la entidad en ese caso es la única forma de garantizar que la fuente no se arruine cada vez que un usuario de Firefox la edita. – Joey

+2

Un buen resumen, pero con respecto al último punto, es '<' que a menudo necesita escaparse, nunca '>' (y '" 'necesita escaparse solo raramente dentro de los valores de los atributos). –

98

En base a los comentarios que he recibido, investigué esto un poco más. Parece que actualmente la mejor práctica es renunciar al uso de entidades HTML y usar el carácter real UTF-8 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 personaje 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 representarlas como caracteres especiales en lugar de codificaciones decimales o hexadecimales 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. He leído varios documentos sobre este tema, pero los más útiles fueron:

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

Wikipedia es un excelente estudio de caso para una aplicación que originalmente se usó ISO-8859-1 pero cambió a UTF-8 cuando se volvió demasiado engorroso para admitir idiomas extranjeros. bots ahora ir realmente a través de artículos y convertir entidades de caracteres a sus personajes reales correspondientes en aras de facilidad de uso y capacidad de búsqueda .

Ese artículo también ofrece un buen ejemplo de 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;

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

extremadamente incómodo para aquellos de nosotros que realmente saben qué personaje entidades son, totalmente ininteligible a los usuarios pobres que no lo hacen! Incluso el ligeramente más fácil de usar, entidades de caracteres "inteligibles" como & theta; dejará a los usuarios que son desinteresados ​​en el aprendizaje de HTML rascándose la cabeza. En la otra mano , si ven θ en un cuadro de edición, sabrán que es un carácter especial , y lo tratarán como corresponde, incluso si no saben cómo escribir ese carácter.

Como han notado otros, aún debe usar entidades HTML para los caracteres XML reservados (ampersand, less-than, greater-than).

+2

Esta debería ser la respuesta aceptada. –

+0

Esta respuesta ayuda enormemente. Pero para aclarar, para mi propio entendimiento: no hay nada arriesgado o inválido sobre el uso de la sintaxis '& entity;' dentro de un documento HTML con un juego de caracteres UTF-8 declarado, ¿correcto? Si bien los caracteres simples UTF-8 son mejores por las razones que ha enumerado, ¿no tiene todavía algún problema al tener algunas entidades HTML junto a ellos en el mismo documento? –

+0

@JacobFord A la derecha, mezclar entidades HTML con caracteres UTF-8 no es arriesgado o no válido, solo puede ser confuso para alguien que lee la 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.

+3

Creo que todavía los necesitará para codificar los caracteres reservados. – rmeador

+0

@rmeador - Estoy de acuerdo con eso. –

4

Las entidades pueden comprar cierta compatibilidad con clientes con muerte cerebral que no entienden las codificaciones correctamente. No creo que esto incluya navegadores actuales, pero nunca se sabe qué otro tipo de programas podrían estar golpeándote.

más útil, sin embargo, es que las entidades HTML le protegen de sus propios errores: si desconfigurar algo en el servidor y se termina sirviendo una página con un encabezado HTTP que dice que es ISO-8859-1 y una etiqueta de META que dice que es UTF-8 , al menos sus & mdash; es siempre funcionarán.

+0

Muy buen punto, especialmente si eres un codificador defensivo;) – VBAssassin

+5

Sin embargo, podrías hacer el argumento opuesto: '' mdash'es aparece correctamente incluso si los encabezados están mal configurados hace que * sea más difícil * detectar que hay un problema. –

4

No utilizaría UTF-8 para los caracteres que se confunden fácilmente visualmente. Por ejemplo, es difícil distinguir un emdash de un espacio negativo, o especialmente un espacio que no se rompe. Para estos personajes, definitivamente usa entidades.

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

2

Todas las respuestas anteriores tienen sentido para mí.

Además: depende principalmente del editor que intente utilizar y el idioma del documento. Como requisito mínimo para el editor es que sea compatible con el idioma del documento.Esto significa que si el texto está en japonés, tenga cuidado con el uso de un editor que no los muestre (es decir, no hay entidades para el documento en sí). Si es en inglés, incluso puede usar un viejo editor similar a vim y usar entidades solo para la copia relativamente rara &; y amigos. Por supuesto: & gt; para> y otras HTML-especiales todavía necesitan escapes. Pero incluso con los otros idiomas latin-1 (alemán, francés, etc.) escribir ä es un dolor saber dónde ...

Además, personalmente escribo entidades para caracteres invisibles y aquellos que parecen similares a estándar-ascii y, por lo tanto, se confunden fácilmente. Por ejemplo, hay u1173 (que parece un guion en algunos conjuntos de caracteres) o u1175, que se parece a la barra vertical. Yo usaría entidades para esos en cualquier caso.

4

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

Si la conversión del juego de caracteres de/a UTF-8 no fue un desastre grande y poco confiable (siempre tropiezas con algunos personajes y algunas herramientas que no se convierten correctamente), estandarizar en UTF-8 sería el camino a seguir.

4

Personalmente hago todo en UTF-8 desde hace mucho tiempo, sin embargo, en una página HTML, siempre se necesita para convertir los símbolos de unión (&), sea superior (>) y menor (<) caracteres luego a sus entidades equivalentes , & amp ;, & gt; y & lt;

Además, si tiene la intención de hacer algo de programación usando texto utf-8, hay algunas cosas que debe observar.

  • XML necesita algunas líneas adicionales para validar al usar entidades.
  • Algunas bibliotecas no funcionan bien con utf-8. Por ejemplo, PHP en algunas distribuciones de Linux cayó soporte completo para utf-8 en sus bibliotecas de expresiones regulares.
  • Es más difícil limitar el número de caracteres en un texto que usa entidades html, porque una sola entidad usa muchos caracteres. También siempre existe el riesgo de reducir la entidad a la mitad.
Cuestiones relacionadas