`& mdash;` o `& # 8212;` ¿hay alguna diferencia en la salida HTML?

79

— o —

¿Hay alguna diferencia entre estos? ¿Está uno mejor apoyado que el otro?

Adam Ramadhan
fuente
7
Solo para completar: el carácter de guión largo real ("mdash") es: - y debe ser tan ancho como el carácter "m"
Simon B.
6
sí, una M mayúscula
Ray Tayek

Respuestas:

85

Los analizadores SGML (o analizadores XML en el caso de XHTML) pueden manejar —sin tener que procesar el DTD (lo que no importa a los navegadores, ya que solo sorben sopa de etiquetas), mientras que —es más fácil para los humanos leer y escribir en el código fuente.

Personalmente, me apegaría a un em-dash literal y me aseguraría de que la configuración de codificación de mis caracteres fuera consistente.

Quentin
fuente
13

Son exactamente el mismo personaje. Ver: http://en.wikipedia.org/wiki/Dash

Salvo errores del navegador, mostrarán lo mismo en todos los casos, por lo que la única diferencia sería la legibilidad del código, que apuntaría a —.

O, si está utilizando UTF-8 como un juego de caracteres en su documento HTML, puede ingresar el carácter directamente. Eso también mostraría exactamente lo mismo.

RoToRa
fuente
5
Tenga en cuenta que esto solo es cierto para HTML, en XML, &8212;siempre funciona mientras que —depende de haber declarado la entidad.
Flimm
10

—:: —::\u2014

Al representar el guión m en una cadena de texto JavaScript para la salida a HTML, tenga en cuenta que estará representado por su valor Unicode. Hay casos en los que los caracteres ampersand ('&') no se resolverán, en particular, ciertos contextos dentro de JSX. En este caso, ni —ni —funcionará. En su lugar es necesario utilizar la secuencia de escape Unicode: \u2014.

Por ejemplo, al implementar un render()método para generar texto desde una variable de JavaScript:

render() {
   let text='JSX transcoders will preserve the & character—to ' 
            + 'protect from possible script hacking and cross-site hacks.'
   return (
     <div>{text}</div>
   )
}

Esto dará como resultado:

<div>JSX transcoders will preserve the & character&mdash;to protect from possible script hacking and cross-site hacks.</div>

En lugar de la &representación con prefijo, debes usar \ u2014:

let text='JSX transcoders will preserve the & character\u2014to …'
wrlee
fuente
1
Funciona muy bien con React.
Verde
2

Del sitio web de W3 Entidades HTML comunes utilizadas para la tipografía

En aras de la portabilidad, las referencias a entidades Unicode deben reservarse para su uso en documentos que seguramente estarán escritos en juegos de caracteres UTF-8 o UTF-16. En todos los demás casos, deben utilizarse las referencias alfanuméricas.

Traducción: si está buscando un soporte más amplio, vaya con &mdash;

Kamran
fuente
1

Podría ser que usar el código numérico sea más universal, ya que es una referencia directa a un carácter en la tabla de entidad html, pero supongo que ambos funcionan en todas partes. La primera notación es mucho más fácil de recordar para muchos personajes.

Joachim VR
fuente