Czy adres URL jest http://example.com/foo?bar
prawidłowy?
Szukam linku do czegoś oficjalnego, który mówi w ten czy inny sposób. Prosta odpowiedź tak / nie lub anegdotyczne dowody nie wystarczą.
Czy adres URL jest http://example.com/foo?bar
prawidłowy?
Szukam linku do czegoś oficjalnego, który mówi w ten czy inny sposób. Prosta odpowiedź tak / nie lub anegdotyczne dowody nie wystarczą.
Odpowiedzi:
URI RFC nie określa format ciągu zapytania. Chociaż uznaje się, że ciąg zapytania często będzie zawierał pary nazwa-wartość, nie jest to wymagane (np. Często będzie zawierał inny identyfikator URI).
3.4. Pytanie
Komponent zapytania zawiera dane niehierarchiczne, które wraz z danymi w komponencie ścieżki (sekcja 3.3) służą do identyfikacji zasobu w ramach schematu URI i uprawnień do nadawania nazw (jeśli istnieją). ...
... Ponieważ jednak komponenty zapytania są często używane do przenoszenia informacji identyfikujących w postaci par „klucz = wartość”, a jedna często używana wartość jest odniesieniem do innego identyfikatora URI, ...
HTML ustala, że formularz przesłany przez HTTP GET powinien zakodować wartości formularza jako pary nazwa-wartość w postaci „? Klucz1 = wartość1 & klucz2 = wartość2 ...” (odpowiednio zakodowane). Parsowanie ciągu zapytania odbywa się zgodnie z kodem po stronie serwera (np. Mechanizm serwletów Java).
Nie identyfikujesz, jakiej struktury po stronie serwera używasz, jeśli w ogóle, ale jest możliwe, że twoja struktura po stronie serwera może założyć, że ciąg zapytania zawsze będzie w parach nazwa-wartość i może się zakrztusić na ciągu zapytania, który nie jest w tym formacie (np ?bar
.). Jeśli jest to Twój własny niestandardowy kod analizujący ciąg zapytania, po prostu musisz upewnić się, że obsługujesz ten format ciągu zapytania. Jeśli jest to framework, musisz zapoznać się z dokumentacją lub po prostu przetestować, aby zobaczyć, jak jest obsługiwany.
isindex
Magia name
z HTML5 umożliwia wysyłanie ciąg kwerendy bez klucz-wartość w formacie stackoverflow.com/a/37579004/895245
Są całkowicie poprawne. Można by je uznać za odpowiednik dużego, umięśnionego faceta stojącego cicho za posłańcem mafii. Facet nie ma imienia i nic nie mówi, ale sama jego obecność przekazuje informacje.
„Schemat„ http ”służy do lokalizowania zasobów sieciowych za pośrednictwem protokołu HTTP. Ta sekcja definiuje specyficzną dla schematu składnię 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 prawdą, jeśli jest wymieniona.
Jedyną istotną częścią specyfikacji URI jest wiedzieć, że wszystko między pierwszym ?
a pierwszym #
odpowiada definicji zapytania w specyfikacji. Może zawierać dowolne znaki, takie jak [:/.?]
. Oznacza to, że ciąg zapytania, taki jak ?bar
lub, ?ten+green+apples
jest prawidłowy.
Znajdź RFC 3986 tutaj
isindex
nie jest znacząco HTML5.
Został dostarczony jako przestarzały do użycia jako pierwszy element tylko w formularzu i przesyła bez nazwy.
Jeśli nazwa wpisu to „isindex”, jego typ to „text” i jest to pierwsza pozycja w zestawie danych formularza, a następnie dołącz wartość do wyniku i pomiń pozostałe etapy podrzędne tego wpisu, przechodząc do następnego wpis, jeśli istnieje, lub następny krok w ogólnym algorytmie w przeciwnym razie.
Flaga isindex jest przeznaczona wyłącznie do użytku starszego typu. Formularze w zgodnych dokumentach HTML nie będą generować ładunków, które muszą być zdekodowane z ustawioną tą flagą.
Ostatni raz, kiedy isindex był obsługiwany, był HTML3 . Jest używany w HTML5, aby zapewnić łatwiejszą kompatybilność wsteczną.
Obsługa tego formatu URI w bibliotekach jest różna, jednak niektóre biblioteki zapewniają obsługę starszych wersji, aby ułatwić korzystanie z isindex
.
Niektóre biblioteki, takie jak URI Perla, udostępniają metody analizowania tego rodzaju struktur
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(brak specjalnej obsługi)Jako kolejny znacznie częstszy przykład, node.js
przyjmuje normalną trasę i ułatwia analizę
parseQueryString
)Większość innych interfejsów API analizujących identyfikatory URI postępuje podobnie.
parse_url
jest podobną implementacją, ale zwraca tylko ciąg dla zapytania. Przetwarzanie do obiektu k=>v
wymagańparse_string()
Obowiązuje: patrz Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Składniki składni) .
isindex
przestarzała magia name
z HTML5
Ta przestarzała funkcja umożliwia przesłanie formularza do wygenerowania takiego adresu URL, dostarczając dalszych dowodów, że jest on prawidłowy dla HTML. Na przykład:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
generuje adres URL typu:
?bar
Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
jest jednak przestarzałe, jak wspomniano na: https://stackoverflow.com/a/41689431/895245
Jak wszystkie opisane odpowiedzi, jest to całkowicie poprawne do sprawdzenia, szczególnie w przypadku rzeczy typu boolean
Oto prosta funkcja umożliwiająca pobranie ciągu zapytania według nazwy:
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 ciąg zapytania, którego szukasz, 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 kwerendy, w przeciwnym razie będzie true
.