Czy parametr zapytania url jest poprawny, Jeśli nie ma wartości?

Czy adres URL podobny do http://example.com/foo?bar jest ważny?

Szukam linka do czegoś oficjalnego, co mówi tak czy inaczej. Prosta odpowiedź Tak/nie lub niepotwierdzone nie wystarczy.

Author: Conley Owens, 2010-12-29

8 answers

  • Valid to the URI RFC
  • prawdopodobnie akceptowalny dla Twojego frameworka/kodu po stronie serwera

URI RFC nie nakazuje formatu Dla ciągu zapytania. Chociaż uznaje się, że łańcuch zapytania często zawiera pary nazwa-wartość, nie jest to wymagane (np. często będzie zawierał inny URI).

3.4. Zapytanie

Komponent zapytania zawiera dane niehierarchiczne, które wraz z dane w komponencie ścieżka (sekcja 3.3), służy do identyfikacji zasób w zakresie systemu i nazewnictwa URI (jeśli występuje). ...

... Jednak jako komponenty zapytania są często używane do przenoszenia informacji identyfikacyjnych w postaci pary "klucz=wartość" i jedna często używana wartość jest odniesieniem do kolejny URI,..

HTML ustala, że formularz przesłany przez HTTP GET powinien kodować wartości formularza jako pary nazwa-wartość w formularzu "?key1 = value1&key2 = value2..." (poprawnie zakodowane). Parsowanie ciągu zapytania zależy od kodu po stronie serwera (np. Java servlet engine).

Nie identyfikujesz frameworku po stronie serwera, którego używasz, jeśli w ogóle, ale jest możliwe, że Framework po stronie serwera może zakładać, że łańcuch zapytania będzie zawsze w parach nazwa-wartość i może się zadławić łańcuchem zapytania, który nie jest w tym formacie (np. ?bar). Jeśli twój własny kod niestandardowy przetwarza ciąg zapytania, po prostu musisz się upewnić, że obsłużysz ten format ciągu zapytania. Jeśli jego framework, musisz zapoznać się ze swoją dokumentacją lub po prostu przetestować ją, aby zobaczyć, jak jest obsługiwana.

 73
Author: Bert F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-30 22:28:25

Są całkowicie poprawne. Można je uznać za odpowiednik Wielkiego umięśnionego faceta stojącego cicho za posłańcem mafii. Facet nie ma imienia i nie mówi, ale sama jego obecność przekazuje informacje.

 52
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-29 20:15:11

"Schemat" http " służy do lokalizowania zasobów sieciowych za pośrednictwem protokołu HTTP. Ta sekcja definiuje składnię specyficzną dla schematu i semantykę adresów URL http." http://www.w3.org/Protocols/rfc2616/rfc2616.html

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] 
Więc tak, wszystko jest ważne po znaku zapytania. Twój serwer może interpretować inaczej, ale anegdotycznie , możesz zobaczyć, że niektóre języki traktują to jako wartość logiczną, która jest prawdziwa, jeśli jest wymieniona.
 7
Author: Jeff Ferland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-29 20:06:25

Tak, jest ważne.

Jeśli po prostu chcesz sprawdzić, czy parametr istnieje, jest to jeden ze sposobów, aby to zrobić.

 5
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-29 20:05:31

Uri Spec

Jedyną istotną częścią specyfikacji URI jest wiedzieć Wszystko pomiędzy pierwszym ? a pierwszym # pasuje do definicji zapytania. Może zawierać dowolne znaki, takie jak [:/.?]. Oznacza to, że łańcuch zapytania, taki jak ?bar lub ?ten+green+apples jest poprawny.

Znajdź RFC 3986 tutaj

HTML Spec

isindex nie ma znaczenia HTML5.

Jest dostarczany przestarzały do użycia jako pierwszy element w tylko formularz i przesyła bez nazwy.

Jeśli nazwa wpisu to "isindex", jego typem jest" text", i jest to pierwszy wpis w zbiorze danych formularza, następnie dołącz wartość do wyniku i pomiń pozostałe kroki dla tego wpisu, przechodząc do następnego wpisu, jeśli istnieje, lub następnego kroku w ogólnym algorytmie w przeciwnym razie.

Flaga isindex jest przeznaczona wyłącznie do użytku starszego. Formularze w zgodnych dokumentach HTML nie generują ładunków, które należy dekodować za pomocą tej flagi gotowi.

Ostatni raz isindex był obsługiwany przez HTML3 . Jego użycie w HTML5 ma zapewnić łatwiejszą kompatybilność wsteczną.

Wsparcie w bibliotekach

Wsparcie w bibliotekach dla tego formatu URI jest różne, jednak niektóre biblioteki zapewniają wsparcie starsze, aby ułatwić korzystanie z isindex.

Perl URI.pm (wsparcie specjalne)

Niektóre biblioteki, takie jakURI Perla zapewniają metody parsowania tego rodzaju struktury

$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.

Węzeł.js url (brak specjalnego wsparcia)

Jako kolejny o wiele częstszy przykład, node.js przyjmuje normalną drogę i ułatwia parsowanie jako albo

  • a string
  • Jest to obiekt, w którym znajdują się klucze i wartości (za pomocą parseQueryString)

Większość innych URI-parsujących API podążających za czymś podobnym do tego.

 3
Author: Evan Carroll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:59
 2
Author: thirtydot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-29 20:08:30

isindex od HTML5 pozwala przesłać formularz do wygenerowania takiego adresu URL, dostarczając dalszych dowodów, że jest on ważny dla HTML. Np.:

<form action="#isindex" class="border" id="isindex" method="get">
  <input type="text" name="isindex" value="bar"/>
  <button type="submit">Submit</button>
</form>

Generuje URL typu:

?bar

Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute

isindex jest jednak przestarzały, jak wspomniano w: https://stackoverflow.com/a/41689431/895245

 2
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:13

Jak wszystkie inne odpowiedzi opisane, jest to całkowicie poprawne do sprawdzania, szczególnie dla rzeczy typu boolean

Oto prosta funkcja, aby uzyskać ciąg zapytania po nazwie:

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, " "));
}

A teraz chcesz sprawdzić, czy szukany ciąg zapytania istnieje, czy nie, możesz zrobić prostą rzecz, taką jak:

var exampleQueryString = (getParameterByName('exampleQueryString') != null);

exampleQueryString będzie false Jeśli funkcja nie może znaleźć ciągu zapytania, w przeciwnym razie będzie to true.

 0
Author: M98,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 08:11:38