На моей странице asp.net mvc я создаю ссылку, которая отображается следующим образом:
http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230
Согласно валидатору W3C, это неверно и возникает ошибка после первого амперсанда. Он жалуется на то, что & не кодируется, объект & p не распознается и т. д.
AFAIK & не следует кодировать, потому что это разделитель для пары ключ-значение.
Для тех, кому небезразлично: я отправляю эти синтаксические анализаторы как строку запроса, а не как значения, разделенные «/», потому что я не знаю достойного способа передачи необязательных параметров.
Чтобы собрать все воедино:
Не закодировал бы амперсанд и не сделал бы его частью значения моего параметра? Мне нужно отделить вторую переменную от первой
Действительно, кодируя свое значение href, я избавляюсь от ошибок. Однако сейчас мне интересно, что делать, если, например, мой colorId будет «123 и 456», где амперсанд является частью значения. Поскольку разделитель должен быть закодирован, что делать с закодированными амперсандами. Их нужно так сказать дважды закодировать?
Итак, чтобы получить URL:
www.mySite.com/search?query=123&456&page=1
Каким должно быть мое значение href?
Кроме того, я думаю, что я первый человек в мире, которому это небезразлично ... проверьте www и посчитайте страницы, на которых строка запроса проверяется валидатором W3C ..





Сущности, которые являются частью атрибутов, как правило, должны быть закодированы. Таким образом, вам понадобится & amp; вместо просто &
Он работает, даже если не проверяет, потому что большинство браузеров очень, очень, очень снисходительны к тому, что принимать.
Кроме того, если вы выводите XHTML, вы должны кодировать каждую сущность везде, а не только внутри атрибутов.
Я не имел в виду, что изменение doctype на XHTML исправит это, но, поскольку вы правы, сущности внутри атрибутов должны кодироваться во всех вариантах HTML, я изменил ответ, чтобы отразить это.
Все атрибуты HTML должны использовать символьные сущности. Вам только не нужно менять & на & amp; внутри блоков скрипта.
<a href = "http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230">Whatever</a>
В любом месте HTML-документа, где вы хотите, чтобы символ & отображался непосредственно рядом с чем-то, кроме пробелов, вам нужно использовать символьный объект & amp ;. Если это часть атрибута, & amp; будет работать, как если бы это был &. Если документ XHTML, вам нужно использовать символьные сущности везде, даже если у вас нет чего-то рядом с &. Вы также можете использовать другие символьные сущности как часть атрибутов, чтобы обращаться с ними, как если бы они были настоящими символами.
Если вы хотите использовать амперсанд как часть URL-адреса не в качестве разделителя параметров, вам следует использовать% 26.
Например...
<a href = "http://localhost/Hello?name=Bob&text=you%20%26%20me%20"forever"">Hello</a>
Отправит пользователя на http: // localhost / Привет с именем = Bob и text = you & me "навсегда".
В то время я не мог придумать ничего лучшего, у которого была веская причина использовать пробелы, амперсанд и другую символьную сущность :)
Я обнаружил, что это немного сбивает с толку некоторых людей. Когда вы помещаете & на HTML-страницу, например, в <a href = "abc?def=5&ghi=10">, URL-адрес будет на самом делеabc?def=5&ghi=10. Парсер HTML преобразует объект в амперсанд.
Подумайте о том же, что и о том, как вам нужно избегать кавычек в строке:
// though you define your string like this:
myString = "this is \"something\" you know?"
// the string is ACTUALLY: this is "something" you know?
// when you look at the HTML, you see:
<a href = "foo?bar=1&baz=2">
// but the url is ACTUALLY: foo?bar=1&bar=2
Вам необходимо кодировать каждую сущность во всех HTML-документах (за некоторыми исключениями, например, внутри тегов сценария). Если в качестве типа документа установить значение XHTML, его страница не будет проверяться.