2008-11-08 34 views
34

Mi sitio es XHTML Transición compatible excepto por una cosa: la & (comercial) en la URL están escritos como es, en lugar de &XHTML y Y (Ampersand) codificación

Es decir, todas las URL en mis páginas son por lo general como esto:

<a href="http://www.foo.com/page.aspx?x=1&y=2">Foo</a> 

Pero XHTML validator genera este error:

cannot generate system identifier for general entity "y"

... y quiere que la URL que se escribe así:

<a href="http://www.foo.com/page.aspx?x=1&amp;y=2">Foo</a> 

El problema es que el IE y Firefox no manejan correctamente la URL e ignoran el parámetro y. ¿Cómo puedo hacer que este enlace funcione y valide correctamente?

Me parece que es imposible escribir páginas XHTML si los navegadores no funcionan con estrictas URL XHTML codificadas.

¿Quieres ver en acción? Ver la diferencia entre estos dos enlaces (copiar y pegar como son):

http://stackoverflow.com/search?q=ff&sort=newest 

y

http://stackoverflow.com/search?q=ff&amp;sort=newest 
+0

El uso de & en las direcciones URL de su documento XHTML debería funcionar bien, por lo que es probable que el problema esté en otra parte, como otros ya han señalado. Si genera la URL usando algún lenguaje de scripting del lado del servidor, ¿quizás pueda publicar algo de ese código, para que otros puedan ver si el problema podría estar allí? – Daan

Respuesta

54

Acabo de probar esto. Lo que intentaste hacer es correcto. En HTML, si está escribiendo un enlace, los caracteres & deben codificarse como &amp;. Solo codificaría & como %26 si desea que un valor de parámetro contenga un símbolo comercial. Acabo de escribir una página HTML simple que contenía un enlace: <a href="Default2.aspx?param1=63&amp;param2=hel">Click me</a> y funcionó bien: default2.aspx recibió los parámetros previstos y la fuente pasó la validación.

Se requiere la codificación de & como &amp; en HTML, no en el enlace. Cuando el navegador ve el &amp; en la fuente HTML de un enlace, lo interpretará como un símbolo y el objetivo del enlace será el deseado.Si pega una URL en la barra de direcciones de su navegador, no espera que sea HTML y no intenta interpretar ninguna codificación HTML que pueda contener. Esta es la razón por la que los enlaces de ejemplo que sugiere que deberíamos copiar/pegar en un navegador no funcionan y por qué no esperamos que funcionen.

Si publica un poco más de su código real, podremos ver lo que ha hecho mal, pero parece que va en la dirección correcta al usar &amp; en sus etiquetas de anclaje.

+0

gracias, funciona bien –

5

se podría utilizar en lugar de &amp; & en su url dentro de su página.

Esto debería permitir que sea validada una XHTML Strict ...

<a href="http://www.foo.com/page.aspx?x=1&amp;y=2">Foo</a> 

Nota, si se usa por una función de ASP.NET Request.QueryString, la cadena de consulta no utiliza la codificación XML, se utiliza URL encoding:

/mypath/mypage?b=%26stuff 

lo que necesita para proporcionar una función de traducción '&' en 26%

Nota: en ese caso, Server.URLEncod e ("neetu & geetu"), que produciría neetu +% 26 + geetu, no es lo que desea, ya que necesita traducir & en% 26, no solo '&'. Debe agregar una llamada a replace() aplicada al resultado URLEncode, para reemplazar '% 26amp;' por '% 26'.

+0

Lo siento, te he respondido con una nueva respuesta en lugar de un comentario ... ver mi respuesta si quieres seguir el hilo –

+0

Obtuve tu comentario justo ahora;) Al consultar esta cuestión – VonC

6

que era mi culpa: el control de hipervínculo ya codificada &, por lo que mi url http://foo?x=1&amp;y=2 fue codificado a http://foo?x=1&amp;amp;y=2

Normalmente el amplificador & dentro de la URL se maneja correctamente por los navegadores, como ha afirmado. Gracias

-4

El problema es peor de lo que piensas, pruébalo en Safari. & amp; se convierte a & # 38; y el hash termina la URL. La respuesta correcta es no generar XHTML. No hay ninguna razón que justifique pasar más tiempo en el desarrollo y alienando a los usuarios de mac.

+0

Sería igual de inválido en HTML. – TRiG

-1

Para ser aún más exhaustivo: use &#38;, referencia de caracteres numéricos.

Debido &amp; es una entidad de referencia carácter:

Character entity references are defined in the markup language definition. This means, for example, that for HTML only a specific range of characters (defined by the HTML specification) can be represented as character entity references (and that includes only a small subset of the Unicode range).

que viene de los sabios en el W3C (leer this para más).

Por supuesto, esto no es un gran problema, pero la sugerencia de W3C es que el número será válido y utilizable en todas partes y siempre, mientras que el nombre es "bueno" para HTML, pero nada más.

+0

Ese documento también dice que ['&' funciona en todas partes] (http://www.w3.org/International/questions/qa-escapes#use). – Quentin

+0

Los nombrados se asignan a referencias numéricas según la DTD que se aplica. Dado que '&' es compatible con todas las DTD XML y HTML, eso es casi siempre. Sin embargo, sin el análisis DTD o 'simple' SGML, el nombre no funcionará y el numérico lo hará. Además, XML 1.0 solo tiene cinco referencias nombradas predefinidas, por lo que podría mezclar nombres y números en lugar de usar solo números. – kasimir

Cuestiones relacionadas