Является ли URL-адрес http://example.com/foo?bar
действительным?
Я ищу ссылку на что-нибудь официальное, в котором говорится так или иначе. Простой ответ «да / нет» или неподтвержденные данные не помогут.
Является ли URL-адрес http://example.com/foo?bar
действительным?
Я ищу ссылку на что-нибудь официальное, в котором говорится так или иначе. Простой ответ «да / нет» или неподтвержденные данные не помогут.
Ответы:
URI RFC не устанавливает формат строки запроса. Хотя признается, что строка запроса часто будет содержать пары имя-значение, это не обязательно (например, она часто будет содержать другой URI).
3.4. запрос
Компонент запроса содержит неиерархические данные, которые вместе с данными в компоненте пути (раздел 3.3) служат для идентификации ресурса в рамках схемы URI и органа присвоения имен (если есть). ...
... Однако, поскольку компоненты запроса часто используются для передачи идентифицирующей информации в виде пар "ключ = значение", а одно часто используемое значение является ссылкой на другой URI, ...
HTML устанавливает, что форма, отправленная через HTTP GET, должна кодировать значения формы как пары имя-значение в форме «? Key1 = value1 & key2 = value2 ...» (правильно закодировано). Разбор строки запроса выполняется до серверного кода (например, движок сервлетов Java).
Вы не определяете, какую серверную среду вы используете, если таковая имеется, но возможно, что ваша серверная структура может предположить, что строка запроса всегда будет в парах имя-значение, и она может подавиться строкой запроса, которая в этом формате (например ?bar
). Если это ваш собственный код, анализирующий строку запроса, вам просто нужно убедиться, что вы обрабатываете этот формат строки запроса. Если это фреймворк, вам нужно проконсультироваться с вашей документацией или просто протестировать ее, чтобы увидеть, как она обрабатывается.
isindex
Магия name
от HTML5 позволяет отправить строку запроса без ключа значения формата stackoverflow.com/a/37579004/895245
Они совершенно верны. Вы могли бы считать их эквивалентом большого мускулистого парня, молча стоящего за мессенджером. У парня нет имени и он не говорит, но одно его присутствие передает информацию.
«Схема« http »используется для определения местоположения сетевых ресурсов по протоколу HTTP. В этом разделе определяется синтаксис и семантика конкретных схем для URL-адресов http». http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Так что да, все действительно после знака вопроса. Ваш сервер может интерпретировать по- разному, но эпизодически , вы можете увидеть некоторые языки лечения , что как логическое значение , которое является истинным , если в списке.
Единственная релевантная часть спецификации URI - знать, что все между первым ?
и первым #
соответствует определению спецификации запроса. Он может включать любые символы, например [:/.?]
. Это означает, что строка запроса, такая как ?bar
, или ?ten+green+apples
, допустима.
Найдите RFC 3986 здесь
isindex
не имеет смысла HTML5.
Он объявлен устаревшим для использования только в качестве первого элемента формы и отправляется без имени.
Если имя записи - isindex, ее тип - текст, и это первая запись в наборе данных формы, затем добавьте значение к результату и пропустите остальные подэтапы для этой записи, переходя к следующей запись, если таковая имеется, или следующий шаг в общем алгоритме в противном случае.
Флаг isindex предназначен только для устаревшего использования. Формы в соответствующих HTML-документах не будут генерировать полезные нагрузки, которые должны быть декодированы с помощью этого установленного флага.
В последний раз isindex поддерживался HTML3 . Он используется в HTML5 для упрощения обратной совместимости.
Поддержка в библиотеках для этого формата URI варьируется, однако некоторые библиотеки предоставляют устаревшую поддержку для упрощения использования isindex
.
Некоторые библиотеки, такие как Perl URI, предоставляют методы синтаксического анализа таких структур.
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(без специальной поддержки)В качестве еще одного гораздо более частого примера node.js
используется обычный маршрут и упрощается синтаксический анализ, как
parseQueryString
)Большинство других API-интерфейсов для анализа URI следуют примерно такому же принципу.
parse_url
следует аналогичной реализации, но возвращает только строку для запроса. Разбор в объекте k=>v
требуетparse_string()
Это действительно: см. Википедия , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Синтаксические компоненты) .
isindex
устаревшая магия name
из HTML5
Эта устаревшая функция позволяет отправке формы генерировать такой URL-адрес, что является дополнительным доказательством того, что он действителен для HTML. Например:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
генерирует URL-адрес типа:
?bar
Стандарт: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
однако считается устаревшим, как указано по адресу: https://stackoverflow.com/a/41689431/895245
Как и все другие описанные ответы, это совершенно верно для проверки, особенно для булевых типов
Вот простая функция для получения строки запроса по имени:
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
и теперь вы хотите проверить, существует ли искомая строка запроса, вы можете сделать простую вещь, такую как:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
exampleQueryString
будет , false
если функция не может найти строку запроса, в противном случае будет true
.