link attribute html xhtml escaping linq-to-xml html-entities

attribute - Usos para el ''& quot'' entidad en HTML



title html (4)

Como señalan otras respuestas, lo más probable es que sea generado por alguna herramienta.

Pero si yo fuera el autor original del archivo, mi respuesta sería: Consistencia .

Si no se me permite poner comillas dobles en mis atributos, ¿por qué ponerlos en el contenido del elemento? ¿Por qué estas especificaciones siempre tienen estos casos excepcionales? Si tuviera que escribir la especificación HTML, diría que All double quotes need to be encoded . Hecho.

Hoy es como In attribute values we need to encode double quotes, except when the attribute value itself is defined by single quotes. In the content of elements, double quotes can be, but are not required to be, encoded. In attribute values we need to encode double quotes, except when the attribute value itself is defined by single quotes. In the content of elements, double quotes can be, but are not required to be, encoded. (Y seguramente estoy olvidando algunos casos aquí).

Las comillas dobles son una palabra clave de la especificación, codifíquelas. Menor / mayor que una palabra clave de la especificación, codificarlos. etc.

Estoy revisando algunos archivos XHTML creados por otra parte. Como parte de este esfuerzo, estoy haciendo una edición masiva a través de Linq a XML .

Acabo de notar que algunos de los archivos XHTML de origen originales contienen el " Entidad HTML en nodos de texto dentro de esos archivos. Por ejemplo:

<p>Greeting: &quot;Hello, World!&quot;</p>

Y que al recuperar el texto XHTML a través de XElement.ToString() , el &quot; Las entidades están siendo reemplazadas por comillas dobles simples :

<p>Greeting: "Hello, World!"</p>

Pregunta: ¿Alguien puede decirme cuál podría haber sido la motivación para que el autor original use el &quot; ¿Entidades en lugar de simples comillas dobles? ¿Sirvieron esas entidades un propósito que no aprecio del todo? O, ¿fueron realmente innecesarios como sospecho?

Entiendo que &quot; sería necesario en ciertos contextos, como cuando es necesario colocar una comilla doble dentro de un atributo HTML. Por ejemplo:

<a href="/images/hello_world.jpg" alt="Greeting: &quot;Hello, World!&quot;"> Greeting</a>


En mi experiencia, puede ser el resultado de la generación automática mediante herramientas basadas en cadenas, donde el autor no entendió las reglas de HTML.

Cuando algunos desarrolladores generan HTML sin el uso de herramientas especiales orientadas a XML, pueden intentar asegurarse de que el HTML resultante sea válido tomando el enfoque de que todo debe ser evitado .

Refiriéndose a su ejemplo, la razón por la cual cada aparición de " está representada por &quot; podría ser porque utilizando ese enfoque, puede usar esos caracteres" especiales "de forma segura tanto en atributos como en valores.

Otra motivación que he visto es donde la gente cree: "Debemos mostrar explícitamente que nuestros símbolos no forman parte de la sintaxis". Mientras que, se puede crear un HTML válido utilizando las herramientas de manipulación de cadenas adecuadas, vea nuevamente el párrafo anterior.

Aquí hay un pseudocódigo basado libremente en C #, aunque se prefiere usar métodos y herramientas válidos:

public class HtmlAndXmlWriter { private string Escape(string badString) { return badString.Replace("&", "&amp;").Replace("/"", "&quot;").Replace("''", "&apos;").Replace(">", "&gt;").Replace("<", "&lt;"); } public string GetHtmlFromOutObject(Object obj) { return "<div class=''type_" + Escape(obj.Type) + "''>" + Escape(obj.Value) + "</div>"; } }

Es realmente muy común ver tales enfoques adoptados para generar HTML.


Es imposible, e innecesario, conocer la motivación para usar &quot; en el contenido del elemento, pero los motivos posibles incluyen: malentendido de las reglas HTML; uso de software que genera dicho código (probablemente porque su autor pensó que era "más seguro"); y la incomprensión del significado de &quot; : muchas personas parecen pensar que produce "citas inteligentes" (aparentemente nunca observaron los resultados reales).

De todos modos, nunca hay necesidad de usar &quot; en el contenido del elemento en HTML (XHTML o cualquier otra versión HTML). No hay nada en ninguna especificación HTML que asigne un significado especial al carácter simple "allí".

Como dice la pregunta, tiene su función en los valores de atributo , pero incluso en ellos, es más simple usar comillas simples como delimitadores si el valor contiene una comilla doble, por ejemplo, alt=''Greeting: "Hello, World!"'' o, si se le permite corregir errores en textos en lenguaje natural, usar comillas, por ejemplo, alt="Greeting: “Hello, World!”"


Razón # 1

Hubo un punto en el que las implementaciones con errores / perezosas de los renderizadores HTML / XHTML fueron más comunes que las que lo hicieron bien. Hace muchos años, regularmente encontraba problemas de renderizado en los navegadores convencionales como resultado del uso de caracteres de comillas no codificados en el contenido de texto regular de documentos HTML / XHTML. Aunque la especificación HTML nunca ha rechazado el uso de estos caracteres en el contenido de texto, se convirtió en una práctica bastante estándar para codificarlos de todos modos, de modo que los navegadores que no cumplen con las especificaciones y otros procesadores los manejen con más gracia. Como resultado, muchos "veteranos" todavía pueden hacer esto de manera reflexiva. No es incorrecto, aunque ahora es probablemente innecesario, a menos que esté apuntando a algunas plataformas muy arcaicas.

Razón # 2

Cuando el contenido HTML se genera dinámicamente, por ejemplo, al rellenar una plantilla HTML con valores de cadena simples de una base de datos, es necesario codificar cada valor antes de incrustarlo en el contenido generado. Algunos lenguajes comunes del lado del servidor proporcionaron una única función para este propósito, que simplemente codificó todos los caracteres que podrían ser inválidos en algún contexto dentro de un documento HTML. Notablemente, la función htmlspecialchars() PHP es uno de esos ejemplos. Aunque hay argumentos opcionales para htmlspecialchars() que harán que ignore las comillas, esos argumentos fueron utilizados (y son) raramente utilizados por los autores de sistemas básicos basados ​​en plantillas. El resultado es que todos los "caracteres especiales" están codificados en todas partes en el HTML generado, sin tener en cuenta el contexto en el que ocurren. Una vez más, esto no es incorrecto, es simplemente innecesario.