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.
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.
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.
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.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ć.
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.
- PHP
parse_url
, podąża za podobną implementacją, ale zwraca tylko łańcuch dla zapytania. parsowanie do obiektk=>v
wymagaparse_string()
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
Obowiązuje: zobacz Wikipedia, RFC 1738 (3.3. HTTP), RFC 3986 (3. Składnia) .
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
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
.
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