Почему эта строка запроса недействительна?
На моей странице asv.net mvc я создаю ссылку, которая выглядит следующим образом:
http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230
Согласно валидатору W3C, это не правильно, и это ошибки после первого амперсанда. Он жалуется на то, что & не кодируется, а сущность &p не распознается и т. Д.
AFAIK & не должен быть закодирован, потому что это разделитель для пары ключ-значение.
Для тех, кого это волнует: я отправляю эти параметры в виде строки запроса, а не в виде разделенных "/" значений, потому что не существует достойного способа передачи необязательных параметров, которые я знаю.
Чтобы собрать все кусочки вместе:
- атрибуту href тега привязки () тега необходимо закодированное значение
- & кодирует в & amp;
- чтобы кодировать '&', когда оно является частью значения вашего параметра, используйте%26
Не кодирует ли амперсанд и не делает ли это частью значения моего параметра? Мне нужно, чтобы отделить вторую переменную от первой
Действительно, кодируя мое значение href, я избавляюсь от ошибок. Однако сейчас мне интересно, что делать, если, например, мой colorId будет "123&456", где амперсанд является частью значения. Поскольку разделитель должен быть закодирован, что делать с закодированными амперсандами. Нужно ли их так закодировать дважды?
Итак, чтобы получить URL:
www.mySite.com/search?query=123&456&page=1
Каким должно быть мое значение href?
Кроме того, я думаю, что я первый человек в мире, который позаботится об этом.. иди проверь www и посчитай страницы, которые проверяют строку запроса в валидаторе W3C.
3 ответа
Все атрибуты 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/Hello, с именем =Bob и text=you & me "навсегда".
Объекты, которые являются частью атрибутов, как правило, должны быть закодированы. Таким образом, вам нужно & amp; вместо просто &
Он работает, даже если он не проверяется, потому что большинство браузеров очень, очень, очень снисходительно относятся к тому, что принимать.
Кроме того, если вы выводите XHTML, вы должны кодировать каждую сущность везде, а не только внутри атрибутов.
Я нашел, что это немного запутанная концепция для некоторых людей. Когда вы положите &
на странице 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