Estoy usando un ‘ & símbolo con HTML5 y UTF-8 en mi sitio <title>. Google muestra el signo bien en sus SERPs, ya que no todos los navegadores en sus títulos.

http://validator.w3.org me está dando este:

& no iniciar un carácter de referencia. (& probablemente debería haberse escapado como &amp;.)

¿Es realmente necesario hacer &amp;?

No estoy agitaba por mis páginas de validación para el bien de la validación, pero tengo curiosidad por escuchar las opiniones de la gente sobre esto y si es importante y por qué.

  • Las especificaciones no lo dicen. El cartel se refiere a HTML5, que no requiere de escapar de el y comercial en todos los escenarios.
  • Este debe ser el Wiki de la Comunidad, ya que usted está buscando opiniones, y no ser molesto acerca de la validación implica que no hay ninguna base objetiva sobre la que responder.
  • de verdad? Aunque no estoy de acuerdo en que «la validación no importa», yo veo esto como un objetivo de la pregunta: «¿ esta ruptura otra cosa que la especificación?»
  • Sauer – Su ejemplo es una buena pregunta… que no es lo que la pregunta es 😛 Las palabras exactas «tengo curiosidad por escuchar las opiniones de la gente» incluso aparecen en el texto.
  • No estoy de acuerdo aquí. «¿Realmente necesito hacer &amp;?» y «[…] tengo la curiosidad de escuchar las opiniones de la gente sobre esto y si es importante y por qué.» (el énfasis es mío). Los dos indican que él está interesado en la información de los hechos, pero sabe que mucho de esto está abierto para al menos algunos de interpretación, por lo que pide para múltiples opiniones.
  • Sauer – Esto es cierto. Reconozco la validez de su opinión… pero de pie por mi propio bien 😉
  • justo lo suficiente 😉
  • web Actual de los navegadores van a las grandes longitudes a entender al usuario. Y lo hace Google. Es parte de la Especificación. Futuro de los navegadores puede ser menos indulgente. Así que siempre es una buena idea para comprobar cómo lo hace la Wikipedia, y copia de ellos.
  • Cuando xslt transformación de xml a html no se escape & como &amp; en los valores de atributo.
  • Que es un buen enfoque: ver cómo lo hace la wikipedia es
  • Google utiliza &amp; en href url. Ver código fuente en google.com o plus.google.com me gusta seguir el ejemplo de los jugadores importantes en estos temas cuestionables
  • Aquí está el w3 spec
  • caracteres Reservados en HTML debe ser reemplazado con entidades de carácter. Ejemplo de Prueba en este URL: var element = document.evaluate('//table[@class="w3-table-all notranslate"]/tbody/tr[5]/td', window.document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; console.log('HTML:', element.innerHTML); var JS = (element.innerHTML).replace('&amp;', '&'); console.log(JS);
  • El HTML especificación dice a aceptar la mierda de entrada. ¿Que significa que su sitio es «permitido» a ser una mierda ahora? Etiquetas de cierre que deberán ser cerrados y escapar de las cosas! Vienen en las personas.

InformationsquelleAutor Haroldo | 2010-08-16

17 Comentarios

  1. 136

    Sí. Así como el error, dijo, en HTML, los atributos son #PCDATA lo que significa que son analizados. Esto significa que usted puede utilizar entidades de carácter en los atributos. El uso de & de por sí es malo y si no por el indulgente de los navegadores y el hecho de que este es el HTML no XHTML, rompería el análisis. Acaba de escapar de ella como &amp; y que todo estaría bien.

    HTML5 permite dejar sin escape, pero sólo cuando los datos que sigue no se ve como un carácter válido de referencia. Sin embargo, es mejor sólo para escapar de todas las instancias de ese símbolo que preocuparse acerca de cuáles deben ser, y que no deben ser.

    Mantener este punto en mente, si no estás escapando & &amp;, es bastante malo para los datos que usted cree (donde el código se podría muy bien ser no válida), también es posible que no se escapan de la etiqueta de delimitadores, que es un enorme problema para los datos enviados por un usuario, que podría muy bien conducir a HTML y secuencias de comandos de inyección, cookie robar y otros ataques.

    Por favor, acaba de escapar de su código. Esto le ahorrará un montón de problemas en el futuro.

    • No hay ningún explorador nunca «malinterpretar» a & por sí mismo. Cada navegador lo muestra como «&». Teniendo en cuenta que explícitamente le preguntó por la razón práctica para hacerlo, y que él dijo que él no se preocupa de validación..
    • Sí. Pero moralmente, debemos ser confiando en la indulgencia y «bonito», el manejo de errores de los navegadores? O ¿debemos escribir el código correcto?
    • mientras yo trato de hacer cada página que escribo validar, entiendo que de la lectura de su pregunta a la que no le importan «moralmente». Él sólo le importa si funciona o no. Se trata de dos diferentes filosofías y ambos tienen sus pros y sus contras, y no hay una «correcta» de uno. Por ejemplo este sitio web no valida, y sin embargo es un gran sitio web.
    • También, incluso si era XHTML no «romper el análisis» a menos que el tipo de contenido que se establece en application/xhtml+xml, que nadie lo hace porque es más tonto que en lugar de la gracia de la manipulación de un error el navegador debe dejar de fumar. (Por eso XHTML está siendo descontinuado en favor de HTML 5)
    • pero los navegadores tienen bastantes errores en su manera de interpretar el código correcto, en función de obtener el derecho de resultados cuando se envían sin sentido marcado es arriesgado. Puede trabajar hoy con el ejemplo, y luego de un error con el siguiente ejemplo (decir si el siguiente ejemplo tiene un semi-colon en algún lugar después de la &)
    • Estoy de acuerdo que es en todos los casos mejor si su validar páginas. Obviamente no soy la impugnación de eso. La zona gris es esta: ¿vale la pena el gasto de X horas de tiempo de desarrollo para hacerlos validar, o es mejor tomar el pequeño riesgo de que en el futuro, de alguna manera, las cosas se pueden romper? Yo personalmente creo que vale la pena, pero no culpo a la gente que piensa que no es (como Jeff Atwood) ya que es una zona gris. Una cosa es cierta: hacer páginas validar cuesta dinero, y es algo importante a tener en cuenta.
    • En este caso, usted está equivocado. No se tarda X horas o Y dólares para que valide para este caso particular. Es un simple caso de preg_replace('/&/','&amp;',$code);
    • Todo el mundo parece estar hablando de HTML5, pero la pregunta original de los estados que HTML5 está en uso. HTML5 permite explícitamente un sin escape & en esta situación, a menos que lo que sigue & normalmente se expanda a una entidad (por ejemplo, &copy=2 es problemático pero &x=2 es suficiente).
    • Bonini: Te equivocas. Al menos Firefox y Opera, seguir las reglas y va a interpretar correctamente los siguientes: <a href="http://www.google.com/search?q=foo&sect=bar">foo§=bar</a>.
    • Hasta que haya pasado el X horas de tiempo de desarrollo, haciéndolos validar (X debería ser realmente < 1 en la mayoría de los casos) y luego no sabes por que no son de la validación. Si usted ha estado prestando incluso razonable en atención a que el código en el ínterin, entonces ¿por qué de repente han tonterías de salida? Vas a tener que investigar para asegurarse de que usted no tiene un grave error, y entonces es 5secs solucionarlo de todos modos. Una de las grandes ventajas de mantener las cosas válido es que las cosas que de repente no es válido rápidamente puede marcar un error sutil que se puede perder si todo lo que la salida era una tontería.
    • Hacer validar páginas realmente no le costará ningún dinero en absoluto, al menos no si va a crear otros nuevos. Mantener inválidas si las cosas se rompen cuesta dinero.
    • Caramba-maldita sea. Me perdí el HTML 5 bits en la pregunta!
    • Voy a moverlo a una respuesta.
    • Me dijo explícitamente a & por sí mismo. En el ejemplo, es por sí misma, no es?
    • Usted dice que HTML5 permiten a menos que parece es un carácter válido de referencia. ¿Qué significa parece exactamente? Seguramente el estándar es más preciso que el de este.
    • &copy=3 ‘ve’ como un válido entidad como &copy; está definido. De acuerdo con HTML5, este tipo de cosas definitivamente debe ser escapado. &asldfj=4 no se ve como una referencia definida, por lo que no necesita, pero debe ser escapado de todos modos por las razones que he indicado anteriormente en mi respuesta.

  2. 52

    Validación de un lado, el hecho sigue siendo que la codificación de ciertos personajes es importante para un documento HTML para que pueda visualizarse correctamente y de forma segura como una página web.

    Codificación & como &amp; bajo todas las circunstancias, para mí, es una regla de vida, reduciendo la probabilidad de errores y fracasos.

    Compare las siguientes: que es más fácil? lo que es más fácil bugger hasta?

    Metodología 1

    1. Escribir algún contenido que incluye caracteres ampersand.
    2. Codificar todos ellos.

    Metodología 2

    (con un grano de sal, por favor 😉 )

    1. Escribir algún contenido que incluye un signo de y comercial caracteres.
    2. En un caso por caso, buscar en cada signo. Determinar si:
      • Es aislado, y como tal de manera inequívoca un signo de y comercial. por ejemplo. volt & amp
         > En ese caso, no te molestes en la codificación de los mismos.
      • No es aislado, pero lo sientes, no obstante, es inequívoco, como la resultante de la entidad no existe y nunca va a existir desde la lista de entidades que nunca podría evolucionar. por ejemplo amp&volt
         > En ese caso, no te molestes en la codificación de los mismos.
      • No es aislado, y ambiguo. por ejemplo. volt&amp
         > Codificar.

    ??

  3. 31

    He investigado a fondo y escribió acerca de mis resultados aquí: http://mathiasbynens.be/notes/ambiguous-ampersands

    También he creado una herramienta en línea que puede utilizar para comprobar el marcado por el signo ambiguo o referencias de caracteres que no terminan con un punto y coma, ambos de los cuales no son válidos. (No HTML validator actualmente hace esto correctamente.)

    ¿Es realmente necesario codificar '&' como '&'?

    • Puede que yo sólo sugiero poner los ejemplos aquí en la herramienta en lugar de la actual texto predeterminado, que es algo confuso y poco claro?
    • ¿Qué ejemplos? El OP no especificar.
    • Sólo quiero decir que los ejemplos en: mothereff.en/el signo cuando se carga primero que no son tan útiles como los ejemplos de la lista aquí. No es gran cosa, por supuesto.
    • gracias por tu blog y esta herramienta. Realmente, hemos ido más allá. La verdadera conclusión aquí es que usted puede oficialmente escribir texto sin cifrar & como siempre que no look como un atributo expresión. Esto realmente borra las cosas para mí. Personalmente. La especificación HTML5 sale de su camino para hacer de HTML fácil de escribir, empujando la difícil labor de interpretación para el navegador, que en mi opinión es una buena manera de alrededor para que pueda ser. Ido son los días de la estricta sintaxis de XHTML, y eso es una gran cosa.
  4. 19

    HTML5 reglas son diferentes de HTML4. No es necesario en HTML5 – a menos que el signo parece que se inicia un nombre de parámetro. «&copy=2» es todavía un problema, por ejemplo, ya que &copy; es el símbolo de derechos de autor.

    Sin embargo a mí me parece que es más difícil trabajar a decidir para codificar o no para codificar según el siguiente texto. Así que el camino más fácil es probablemente para codificar todo el tiempo.

    • Es como citar a los valores del atributo: no tiene, pero usted no puede ir mal si lo haces todo el tiempo.
    • &copy=2 no es tan grande de un problema como usted puede pensar. En los valores de atributo (por ejemplo, la href atributo), el &copy no será considerada como una referencia de carácter para ©. Fuera de un valor de atributo, lo haría.
    • Dado que un signo de y comercial es normalmente precedido y seguido por un espacio en el texto en inglés, no es difícil recordar o pensar acerca de la regla que se sigue: Si el signo no está en contacto con otro carácter visible, que es casi siempre, entonces no necesita codificación. De lo contrario, sólo codifican para simplificar.
    • Puede agregar una referencia al HTML5 reglas?
  5. 14

    Creo que esto se ha convertido en más de una pregunta de «¿por qué siga la especificación cuando el navegador no me importa.» Aquí está mi respuesta generalizada:

    Normas no son un «regalo» de la cosa. Son un «futuro» de la cosa. Si nosotros, como desarrolladores, siga los estándares web, a continuación, los fabricantes de los navegadores son más propensos a la correcta aplicación de dichas normas, y nos acercamos más a una completamente interoperable web, donde hacks de CSS, característica de detección, y la detección del navegador no son necesarias. Donde no tenemos que averiguar por qué nuestros diseños de descanso en un navegador en particular, o de cómo evitar que.

    Específicamente, si HTML5 no requiere el uso de &amp; en su situación específica, y usted está usando un doctype de HTML5 (y también esperan que los usuarios para el uso de HTML5 compatible con los navegadores), entonces no hay ninguna razón para hacerlo.

    • Con eso se dice, hablando en general, usted debe recordar que la mayoría de las «estándar» maneras todavía están en modo de borrador y puede cambiar en el futuro.
  6. 5

    Bien, si se trata de la entrada de usuario, a continuación, por supuesto que sí, por razones obvias. Creo que si esta misma página web no hacerlo: el título de esta pregunta muestran como ¿es realmente necesario codificar ‘&’ como ‘&’?

    Si es sólo algo como echo '<title>Dolce & Gabbana</title>';, a continuación, estrictamente hablando, usted no tiene que. Sería mejor, pero si no el usuario no notará la diferencia.

  7. 5

    Podría usted nos muestran lo que su title realmente es? Cuando me someto

    <!DOCTYPE html>
    <html>
    <title>Dolce & Gabbana</title>
    <body>
    <p>am i allowed loose & mpersands?</p>
    </body>
    </html>

    a http://validator.w3.org/explícitamente que pide que el uso experimental de HTML 5 modo de – no tiene quejas sobre el &s…

    • Sí, HTML5 tiene una diferente analizador que los anteriores de HTML y XHTML de los analizadores, y permite sin escape el signo en ciertas situaciones.
    • Tan lejos como estos ejemplos vaya, esto no es nada nuevo en HTML5. Ambos <title>Dolce & Gabbana</title> y <p>Dolce & Gabbana</p> son válidos HTML 2.0.
  8. 4

    En HTML un & marca el comienzo de una referencia, ya sea de un referencia de carácter o de un entidad de referencia. A partir de ese punto, el analizador espera un # que denota un carácter de referencia, o una entidad nombre que denota una entidad de referencia, tanto seguido por un ;. Ese es el comportamiento normal.

    Pero si el nombre de referencia o sólo la referencia de la apertura de & es seguido por un espacio en blanco o de otros delimitadores como ", ', <, >, &, el final ; e incluso una referencia a representar una llanura & puede ser omitido:

    <p title="&amp;">foo &amp; bar</p>
    <p title="&amp">foo &amp bar</p>
    <p title="&">foo & bar</p>

    Sólo en estos casos el final ; o incluso la propia referencia puede ser omitido (al menos en HTML 4). Creo que HTML 5 se requiere el final ;.

    Pero la especificación recomienda utilizar siempre una referencia de como el personaje de referencia &#38; o de la entidad de referencia &amp; para evitar confusiones:

    Los autores deben utilizar «&amp;» (ASCII decimal 38) en lugar de «&» para evitar la confusión con el comienzo de un personaje de referencia (referencia de entidad abierta delimitador). Los autores también deben usar «&amp;» en los valores de atributo ya que las referencias de caracteres permitidos en CDATA los valores de atributo.

    • Que es el HTML 4 spec enlace; a partir de mi lectura de el (proyecto) HTML 5 spec, sólo ambigua el signo no están permitidos. El signo » & » seguido de un espacio, por ejemplo, no es ambiguo, y así (de nuevo en mi lectura) debe ser permitido – ver mi respuesta para el marcado que el HTML 5 validador acepta.
    • ¿He dicho algo malo?
    • No; no me diga que lo hizo? 🙂
    • No estoy seguro, sonaba como que.
  9. 3

    Si el usuario pasa a usted, o se va a acabar en una dirección URL, usted necesita para escapar de él.

    Si aparece en el texto estático en una página? Todos los navegadores tienen este un derecho de cualquier manera, no te preocupes mucho por eso, ya que va a trabajar.

  10. 2

    Sí, usted debe tratar de servir código válido si es posible.

    La mayoría de los navegadores silenciosamente corregir este error, pero hay un problema con confiando en el manejo de errores en los navegadores. No hay un estándar sobre cómo manejar el código incorrecto, así que depende de cada navegador vendedor para tratar de averiguar qué hacer con cada error, y los resultados pueden variar.

    Algunos ejemplos en los que los navegadores son propensos a reaccionar de manera diferente es si poner los elementos dentro de una tabla, pero fuera de las celdas de la tabla, o si usted nido de enlaces dentro de cada uno de los otros.

    Por su ejemplo específico no es susceptible de causar cualquier tipo de problemas, pero la corrección de errores en el navegador podría, por ejemplo, hacer que el explorador cambio de que cumple con los estándares modo en peculiaridades de la modalidad, que podría hacer que su diseño se descomponen completamente.

    Así, se debe corregir errores como este en el código, si no para otra cosa así que para mantener la lista de errores en el validador corto, por lo que puede detectar problemas más serios.

  11. 2

    Hace un par de años, tenemos un informe que una de nuestras aplicaciones web no se muestren correctamente en Firefox. Resultó que la página contiene una etiqueta que parecía

    <div style="..." ... style="...">

    Cuando se enfrentan a un nuevo atributo de estilo, es decir, combina las dos estilos, mientras que Firefox utiliza sólo uno de ellos, de ahí el diferente comportamiento. He cambiado la etiqueta de

    <div style="...; ..." ...>

    y, por supuesto, se solucionó el problema! La moraleja de la historia es que los navegadores tienen más consistente manejo de HTML válido que el de HTML no válido. Así, arreglar tu maldita marcado ya! (O usar HTML Tidy para solucionarlo.)

  12. 2

    Estaba revisando por qué la Imagen de la URL de la necesidad de escapar, de ahí probé en https://validator.w3.org. La explicación es bastante agradable. Resalta el hecho de que incluso la URL de la necesidad de ser escapado. [PS:creo que sin escape cuando su consumido desde la URL de la necesidad de &. ¿Alguien puede aclarar?]

    <img alt="" src="foo?bar=qut&qux=fop" />

    Una entidad de referencia se encuentran en el documento, pero no hay ninguna
    de referencia con ese nombre definido. A menudo, esto es causado por la falta de ortografía
    el nombre de referencia, sin codificar el signo, o dejando fuera de la
    punto y coma final (;). La causa más común de este error es
    sin codificar el signo en la Url como se describe por el WDG en «el Signo en
    Url». Las referencias a entidades comienzan con un signo de y comercial (&) y al final con un
    punto y coma (;). Si desea utilizar un literal y comercial en el documento
    usted debe codificar como «&» (incluso dentro de URLs!). Tenga cuidado a la final
    referencias de entidad con un punto y coma o su entidad de referencia puede obtener
    interpretado en conexión con el siguiente texto. También hay que tener en mente
    que nombre de la entidad referencias son sensibles a las mayúsculas; &Aelig; y æ
    son personajes diferentes. Si este error aparece en algunos de marcado
    generado por PHP, manejo de sesiones del código, en este artículo se ha
    explicaciones y soluciones a su problema.

    • Lea la parte superior de votación de respuesta. Los atributos son #PCDATA y por lo tanto se analiza. Entidades que se manejan allí. En tu ejemplo, la & comienza una entidad de referencia. Después de leer &qux, el analizador encuentra que no hay final, punto y coma (;), pero se ejecuta en un signo de igual (=), que no puede ser parte de un nombre de entidad. Este debe ser error de análisis, si el analizador tratado de ser muy estricta (de acuerdo con HTML 4). En HTML 5, las entidades de análisis es, en general, más relajado.
    • Sospecho que, en general, es mejor usar ; como separador en las cadenas de consulta (cuando el control del enlace) por esa razón.
  13. 1

    si & se utiliza en html entonces usted debe escapar de ella

    Si & se utiliza en cadenas javascript, por ejemplo, un alert('This & that'); o documento.href usted no necesita usarlo.

    Si usted está utilizando el documento.escribir entonces usted debe utilizar la que, por ejemplo, document.write(<p>this &amp; that</p>)

  14. 1

    Depende de la probabilidad de que un punto y coma final cerca de su &, haciendo que se muestre algo muy diferente.

    Por ejemplo, cuando se trata de la aportación de los usuarios (por ejemplo, si se incluyen los proporcionados por el usuario objeto de un post del foro en sus etiquetas de título), nunca se sabe dónde pueden estar poniendo al azar punto y coma, y es posible que al azar pantalla extraño entidades. Así que siempre escapar de esa situación.

    Para su propio html estático, seguro, usted podría omitir, pero es tan trivial que se incluyen los de escapar, de que no hay ninguna buena razón para evitarlo.

  15. 0

    Si que estamos hablando en realidad el texto estático

    <title>Foo & Bar</title>

    almacenados en algún archivo en el disco duro y servido directamente por un servidor, entonces sí: probablemente no necesita ser escapado.

    Sin embargo, ya que hay muy poco contenido HTML que hoy en día completamente estática, voy a añadir el siguiente descargo de responsabilidad que asume que el contenido HTML que se genera a partir de otras fuentes (contenido de base de datos, entrada de usuario, llamada de servicio web consecuencia, el legado de la API de resultados, …):

    Si no escapar de una simple &, entonces es probable que usted también no escapar de una &amp; o un &nbsp; o <b> o <script src="http://attacker.com/evil.js"> o cualquier otro texto no válidas. Eso significaría que usted está en el mejor visualización de su contenido de manera equivocada y más probable es susceptible a los Los ataques XSS.

    En otras palabras: cuando ya estás comprobando y escapar de los otros más problemáticos de los casos, entonces no hay razón para dejar la no-totalmente-roto-pero-todavía-un poco-pescado independiente-& sin escape.

    • Yo no downvote pero, si tuviera que adivinar, diría que fueron votada abajo porque su respuesta (mientras inteligente) es un poco de un desajuste con la pregunta. Él no está pidiendo que trata de escaparse de la entrada del usuario. Él tiene el control sobre los personajes y es básicamente «Si hace lo que quiere, es muy importante seguir el lenguaje de especificación a la carta?» I. e., él sabe que hay un & porque él lo puso en.
    • Yo lo veo, y que sería razonable. Yo era sólo asumiendo que nadie escribe enteramente páginas HTML estáticas y que prácticamente todo el contenido es al menos algo dinámico (generalmente basadas en alguna base de datos de contenido). Tal vez esa suposición debería haber sido hecho explícito.
  16. -1

    no estoy seguro si esto es útil para cualquier persona… yo estaba luchando contra este por un tiempo… aquí es un glorioso regex puede utilizar para solucionar todos sus enlaces, javascript, contenido. Tuve que lidiar con un montón de contenido antiguo, que nadie ha querido corregir.

    Agregar esto a tu Render reemplazar en su página principal o de control:

    Por favor, no me llama para poner esto en el lugar equivocado:

    //remove the & from href="blaw?a=b&b=c" and replace with &amp; 
    //in urls - this corrects any unencoded & not just those in URL's
    //this match will also ignore any matches it finds within <script> blocks AND
    //it will also ignore the matches where the link includes a javascript command like
    //<a href="javascript:alert{'& & &'}">blaw</a>
    html = Regex.Replace(html, "&(?!(?<=(?<outerquote>[\"'])javascript:(?>(?!\\k<outerquote>|[>]).)*)\\k<outerquote>?)(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\\d+);)(?!(?>(?:(?!<script|\\/script>).)*)\\/script>)", "&amp;", RegexOptions.Singleline | RegexOptions.IgnoreCase);
  17. -1

    El vínculo tiene un muy buen ejemplo de cuándo y por qué puede necesitar para escapar de & a &amp;

    https://jsfiddle.net/vh2h7usk/1/

    Curiosamente, tuve que escapar de la personalidad para representar correctamente en mi respuesta aquí. Si yo fuera a utilizar el built-in ejemplo de código opción (a partir de la respuesta del panel), solo puedo escribir en &amp; y aparece como debería. Pero si yo fuera a utilizar manualmente el <code></code> elemento, entonces tengo que escapar para poder representar correctamente 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here