Estoy usando un &
símbolo ' ' con HTML5 y UTF-8 en mi sitio <title>
. Google muestra el ampersand bien en sus SERPs, al igual que todos los navegadores en sus títulos.
http://validator.w3.org me está dando esto:
& no inició una referencia de caracteres. (Y probablemente debería haberse escapado como
&
.)
¿Realmente necesito hacer &
?
No estoy preocupado por la validación de mis páginas en aras de la validación, pero tengo curiosidad por escuchar las opiniones de las personas sobre esto y si es importante y por qué.
validation
html
utf-8
character-encoding
Haroldo
fuente
fuente
Respuestas:
Si. Tal como decía el error, en HTML, los atributos son #PCDATA, lo que significa que se analizan. Esto significa que puede usar entidades de caracteres en los atributos. El uso
&
por sí solo es incorrecto y si no fuera por navegadores indulgentes y el hecho de que esto es HTML no XHTML, rompería el análisis. Simplemente escapa como&
y todo estaría bien.HTML5 le permite dejarlo sin escape, pero solo cuando los datos que siguen no parecen una referencia de caracteres válida. Sin embargo, es mejor escapar de todas las instancias de este símbolo que preocuparse por cuáles deberían ser y cuáles no.
Tenga este punto en mente; si no está escapando & a & amp ;, es lo suficientemente malo para los datos que crea (donde el código podría ser inválido), también podría no estar escapando delimitadores de etiquetas, lo cual es un gran problema para los datos enviados por el usuario, que bien podría conducir a la inyección de HTML y script, robo de cookies y otras vulnerabilidades.
Por favor, solo escapa de tu código. Le ahorrará muchos problemas en el futuro.
fuente
Dejando a un lado la validación, el hecho es que codificar ciertos caracteres es importante para un documento HTML para que pueda representarse de manera adecuada y segura como una página web.
Codificar
&
como&
en todas las circunstancias, para mí, es una regla más fácil de cumplir, lo que reduce la probabilidad de errores y fallas.Compare lo siguiente: ¿cuál es más fácil? ¿ Cuál es más fácil de fastidiar ?
Metodología 1
Metodología 2
(con un grano de sal, por favor;))
volt & amp
> En ese caso, no te molestes en codificarlo.
amp&volt
> En ese caso, no te molestes en codificarlo.
volt&
> Codifícalo.
??
fuente
amp&volt
es ambiguo: ¿es&volt
ahora una referencia de entidad o no?amp&volt
es un ampersand ambiguo (según la definición en la especificación HTML). Ver mathiasbynens.be/notes/ambiguous-ampersands y mothereff.in/ampersands#amp%26volt .Las reglas HTML5 son diferentes de HTML4. No es necesario en HTML5, a menos que parezca que comienza un nombre de parámetro. "& copy = 2" sigue siendo un problema, por ejemplo, ya que & copy; Es el símbolo de copyright.
Sin embargo, me parece que es más difícil decidir codificar o no codificar dependiendo del siguiente texto. Entonces, el camino más fácil es probablemente codificar todo el tiempo.
fuente
©=2
No es un problema tan grande como puede pensar. En los valores de atributo (por ejemplo, elhref
atributo),©
no se considerará como una referencia de caracteres para©
. Fuera de un valor de atributo, lo haría.Creo que esto se ha convertido en una cuestión de "por qué seguir las especificaciones cuando los navegadores no me importan". Aquí está mi respuesta generalizada:
Las normas no son una cosa "presente". Son una cosa "futura". Si nosotros, como desarrolladores, seguimos los estándares web, entonces es más probable que los proveedores de navegadores implementen esos estándares correctamente, y nos acerquemos a una web completamente interoperable, donde los hacks CSS, la detección de características y la detección del navegador no son necesarios. Donde no tenemos que descubrir por qué nuestros diseños se rompen en un navegador en particular, o cómo solucionarlo.
Específicamente, si HTML5 no requiere el uso de & amp; en su situación específica, y está utilizando un doctype HTML5 (y también espera que sus usuarios usen navegadores compatibles con HTML5), entonces no hay razón para hacerlo.
fuente
Bueno, si proviene de la entrada del usuario, absolutamente sí, por razones obvias. Piense si este mismo sitio web no lo hiciera: el título de esta pregunta se mostrará como ¿realmente necesito codificar '&' como '&'?
Si es algo así
echo '<title>Dolce & Gabbana</title>';
, estrictamente hablando, no tiene que hacerlo. Sería mejor, pero si no lo hace, ningún usuario notará la diferencia.fuente
¿Podrías mostrarnos cuál es tu
title
realidad? Cuando presentea http://validator.w3.org/ - pidiéndole explícitamente que use el modo experimental HTML 5 - no tiene quejas sobre el
&
s ...fuente
<title>Dolce & Gabbana</title>
y<p>Dolce & Gabbana</p>
son válidos HTML 2.0.En HTML,
&
marca el comienzo de una referencia, ya sea de una referencia de caracteres o de una referencia de entidad . A partir de ese momento, el analizador espera que#
denote una referencia de carácter o un nombre de entidad que denote una referencia de entidad, ambos seguidos de a;
. Ese es el comportamiento normal.Pero si el nombre de referencia o simplemente la apertura de referencia
&
es seguido por un espacio en blanco u otros delimitadores,"
,'
,<
,>
,&
, el final;
e incluso una referencia para representar una llanura&
se puede omitir:Solo en estos casos
;
se puede omitir el final o incluso la referencia en sí (al menos en HTML 4). Creo que HTML 5 requiere el final;
.Pero la especificación recomienda usar siempre una referencia como la referencia de caracteres
&
o la referencia de entidad&
para evitar confusiones:fuente
Si el usuario se lo pasa, o terminará en una URL, debe escapar.
Si aparece en texto estático en una página? Todos los navegadores obtendrán este correcto de cualquier manera, no se preocupe mucho, ya que funcionará.
fuente
Actualización (marzo de 2020): el validador del W3C ya no se queja de escapar de las URL.
Estaba comprobando por qué la URL de la imagen necesita escapar, por lo tanto, lo intenté en https://validator.w3.org . La explicación es bastante buena. Destaca que incluso las URL deben escaparse. [PD: supongo que se escapará cuando se consuma, ya que la URL lo necesita
&
. ¿Alguien puede aclarar?]fuente
&
comienza una referencia de entidad. Después de leer&qux
, el analizador no encuentra punto y coma final (;
), pero se encuentra con un signo igual (=
), que no puede ser parte del nombre de la entidad. Esto debería ser un error de análisis, si el analizador intentó ser realmente estricto (de acuerdo con HTML 4). En HTML 5, el análisis de entidades es en general más relajado.;
como separador en las cadenas de consulta (cuando controlas el enlace) por ese motivo.Sí, debe intentar proporcionar un código válido si es posible.
La mayoría de los navegadores corregirán silenciosamente este error, pero existe un problema al confiar en el manejo de errores en los navegadores. No hay un estándar sobre cómo manejar el código incorrecto, por lo que depende de cada proveedor de navegador tratar de averiguar qué hacer con cada error, y los resultados pueden variar.
Algunos ejemplos en los que es probable que los navegadores reaccionen de manera diferente es si coloca elementos dentro de una tabla pero fuera de las celdas de la tabla, o si anida enlaces uno dentro del otro.
Para su ejemplo específico, no es probable que cause ningún problema, pero la corrección de errores en el navegador podría, por ejemplo, hacer que el navegador cambie del modo compatible con los estándares al modo peculiar, lo que podría hacer que su diseño se descomponga por completo.
Por lo tanto, debe corregir errores como este en el código, si no fuera por cualquier otra cosa, para mantener corta la lista de errores en el validador, de modo que pueda detectar problemas más serios.
fuente
Hace un par de años, recibimos un informe de que una de nuestras aplicaciones web no se mostraba correctamente en Firefox. Resultó que la página contenía una etiqueta que parecía
Cuando se enfrenta a un atributo de estilo repetido, IE combina ambos estilos, mientras que Firefox solo usa uno de ellos, de ahí el comportamiento diferente. Cambié la etiqueta a
y efectivamente, ¡solucionó el problema! La moraleja de la historia es que los navegadores tienen un manejo más consistente de HTML válido que de HTML no válido. Entonces, ¡arregla tu maldito marcado ya! (O use HTML Tidy para arreglarlo).
fuente
si
&
se usa en html, entonces deberías escaparSi
&
se usa en cadenas de JavaScript, por ejemplo, analert('This & that');
o document.href, no necesita usarlo.Si está usando document.write, entonces debe usarlo, por ejemplo
document.write(<p>this & that</p>)
fuente
document.write
debería ser evitado. Vea el cuadro de advertencia en w3.org/html/wg/drafts/html/master/dom.html#document.write%28%29document.write()
. Pero el punto general que Alex está haciendo sobre escribir en el documento desde los guiones, en mi opinión. +1Depende de la probabilidad de que un punto y coma termine cerca de usted
&
, lo que hace que muestre algo bastante diferente.Por ejemplo, cuando se trata de la entrada de los usuarios (por ejemplo, si incluye el tema proporcionado por el usuario de una publicación en el foro en sus etiquetas de título), nunca se sabe dónde podrían estar poniendo puntos y comas al azar, y podría mostrar al azar entidades extrañas. Así que siempre escapa en esa situación.
Para su propio html estático, seguro, puede omitirlo, pero es tan trivial incluir un escape adecuado que no hay una buena razón para evitarlo.
fuente
Si realmente estás hablando del texto estático
almacenado en algún archivo en el disco duro y servido directamente por un servidor, entonces sí: probablemente no necesite escapar.
Sin embargo, dado que actualmente hay muy poco contenido HTML que sea completamente estático, agregaré el siguiente descargo de responsabilidad que asume que el contenido HTML se genera a partir de alguna otra fuente (contenido de la base de datos, entrada del usuario, resultado de la llamada al servicio web, resultado API heredado). ..):
Si no escapar de un simple
&
, entonces es probable que usted también no escapar de un&
o una
o<b>
o<script src="http://attacker.com/evil.js">
o cualquier otro texto válido. Eso significaría que, en el mejor de los casos, muestra su contenido incorrectamente y es más probable que sea sospechoso de ataques XSS .En otras palabras: cuando ya está comprobando y escapando de los otros casos más problemáticos, casi no hay razón para dejar al independiente, no totalmente roto, pero aún un tanto sospechoso, y sin escapes.
fuente
No estoy seguro de si esto es útil para alguien ... Estuve luchando contra esto por un tiempo ... aquí hay una gloriosa expresión regular que puede usar para arreglar todos sus enlaces, javascript, contenido. Tuve que lidiar con un montón de contenido heredado que nadie quería corregir.
Agregue esto a su anulación de Render en su página maestra o control:
Por favor, no me critiques por poner esto en el lugar equivocado:
fuente
El enlace tiene un ejemplo bastante bueno de cuándo y por qué es posible que deba escapar
&
a&
https://jsfiddle.net/vh2h7usk/1/
Curiosamente, tuve que escapar del personaje para representarlo correctamente en mi respuesta aquí. Si tuviera que usar la opción de muestra de código incorporada (desde el panel de respuesta), simplemente podría escribir
&
y aparece como debería. Pero si tuviera que usar manualmente el<code></code>
elemento, entonces tendría que escapar para representarlo correctamente :)fuente