Кодировка XHTML и & (амперсанд)

мой сайт XHTML переходный уступчивый кроме одного: & (амперсанд) в URL-адресе записываются как есть, а не &

то есть, все URL-адреса на моих страницах обычно таковы:

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

но XHTML валидатор выдает ошибку:

не удается создать системный идентификатор для общего объекта "y"

... и он хочет, чтобы url-адрес был написан как это:

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

проблема в том, что IE и Firefox не обрабатывают URL правильно и игнорируют параметр y. как я могу заставить эту ссылку работать и проверять правильно?

мне кажется, что невозможно писать страницы XHTML, если браузеры не работают со строгими закодированными URL-адресами XHTML.

вы хотите увидеть в действии? См. разницу между этими двумя ссылками (скопируйте и вставьте их так, как они есть):

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

и

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

5 ответов


Я только что пробовал это. То, что вы пытались сделать, правильно. В HTML, если вы пишете ссылку & символы должны быть закодированы как &amp; вы только закодируете & as %26 Если вы хотите, чтобы значение параметра содержало амперсанд. Я только что написал простую HTML-страницу, содержащую ссылку:<a href="Default2.aspx?param1=63&amp;param2=hel">Click me</a> и это сработало отлично:default2.aspx получены требуемые параметры, и источник прошел проверку.

кодирование & as &amp; требуются в HTML, не в ссылке. Когда браузер видит &amp; в источнике HTML для ссылки он будет интерпретировать его как амперсанд, а цель ссылки будет соответствовать назначению. Если вы вставляете URL-адрес в адресную строку браузера, он не ожидает, что это будет HTML, и не пытается интерпретировать любую кодировку HTML, которую он может содержать. Вот почему ваши примеры ссылок, которые вы предлагаете скопировать/вставить в браузер, не работают и почему мы не ожидаем, что они будут работать.

если вы дать немного больше из вашего фактического кода мы могли бы увидеть, что вы сделали неправильно, но вы, похоже, направляетесь в правильном направлении, используя &amp; в свой якорь теги.


это была моя ошибка: элемент управления гиперссылкой уже закодирован &, поэтому мой url http://foo?x=1&amp;y=2 был закодирован в http://foo?x=1&amp;amp;y=2

обычно &amp внутри url правильно обрабатывается браузерами, как вы заявили. Спасибо


можно использовать &amp; вместо & в вашем url-адресе на Вашей странице.

Это должно позволить ему быть проверено строгим xhtml...

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

Примечание, Если используется ASP.NET просьба.Функция QueryString, строка запроса не использует кодировку XML, она использует кодировка URL:

/mypath/mypage?b=%26stuff

поэтому вам нужно предоставить функцию, переводящую " & " в %26

Примечание: в этом случае, сервер.URLEncode ("neetu & geetu"), который будет производить neetu + %26+geetu-это не то, что вы хотите, так как вам нужно перевести & в %26, а не просто"&". Необходимо добавить вызов replace (), примененный к результату URLEncode, чтобы заменить "%26amp; " на "%26".


чтобы быть еще более тщательным: используйте &#38;, a числовые ссылка.

, потому что &amp; это ссылка на сущность символа:

символьные ссылки на сущности определяются на языке разметки определение. Это означает, например, что для HTML только определенный диапазон символов (определяется спецификацией HTML) может быть представлено как символьные ссылки на сущности (и включает только небольшое подмножество Unicode range).

это исходит от мудрых людей в W3C (читайте этой для более).

конечно, это не очень важно, но предложение W3C заключается в том, что числовой будет действительным и пригодным для использования везде и всегда, в то время как именованный "отлично" для HTML, но не более того.


проблема хуже, чем вы думаете - попробуйте в Safari. & преобразуется в&, и хэш завершает URL-адрес. Правильный ответ - не выводить XHTML - нет причин, которые оправдывают трату больше времени на разработку и отчуждение пользователей mac.