Un url è http://example.com/foo?bar
valido?
Sto cercando un link a qualcosa di ufficiale che dice in un modo o nell'altro. Una semplice risposta sì / no o prove aneddotiche non la taglieranno.
Un url è http://example.com/foo?bar
valido?
Sto cercando un link a qualcosa di ufficiale che dice in un modo o nell'altro. Una semplice risposta sì / no o prove aneddotiche non la taglieranno.
Risposte:
L' URI RFC non impone un formato per la stringa di query. Sebbene sia riconosciuto che la stringa di query spesso porterà coppie nome-valore, non è necessario (ad es. Conterrà spesso un altro URI).
3.4. domanda
Il componente di query contiene dati non gerarchici che, insieme ai dati nel componente percorso (Sezione 3.3), servono a identificare una risorsa nell'ambito dello schema dell'URI e dell'autorità di denominazione (se presente). ...
... Tuttavia, poiché i componenti di query vengono spesso utilizzati per trasportare informazioni di identificazione sotto forma di coppie "chiave = valore" e un valore utilizzato di frequente è un riferimento a un altro URI, ...
HTML stabilisce che un modulo inviato tramite HTTP GET dovrebbe codificare i valori del modulo come coppie nome-valore nel modulo "? Key1 = value1 & key2 = value2 ..." (codificato correttamente). L'analisi della stringa di query dipende dal codice lato server (ad es. Motore servlet Java).
Non si identifica il framework lato server che si utilizza, se presente, ma è possibile che il framework lato server possa supporre che la stringa di query sia sempre in coppie nome-valore e potrebbe soffocare su una stringa di query che non è in quel formato (ad es ?bar
.). Se è il tuo codice personalizzato che analizza la stringa di query, devi semplicemente assicurarti di gestire quel formato di stringa di query. Se si tratta di un framework, dovrai consultare la tua documentazione o semplicemente testarla per vedere come viene gestita.
isindex
magia name
di HTML5 permette l'invio di una stringa di query senza formato chiave-valore stackoverflow.com/a/37579004/895245
Sono perfettamente validi. Potresti considerarli come l'equivalente del grosso muscoloso in piedi dietro il messaggero della folla. Il ragazzo non ha un nome e non parla, ma la sua semplice presenza trasmette informazioni.
"Lo schema" http "viene utilizzato per individuare le risorse di rete tramite il protocollo HTTP. Questa sezione definisce la sintassi e la semantica specifiche dello schema per gli URL http." http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Quindi sì, tutto è valido dopo un punto interrogativo. Il tuo server potrebbe interpretare diversamente, ma aneddoticamente , puoi vedere alcune lingue che lo considerano come un valore booleano che è vero se elencato.
L'unica parte rilevante delle specifiche URI è sapere tutto tra il primo ?
e il primo che si #
adatta alla definizione della specifica di una query. Può includere caratteri come [:/.?]
. Ciò significa che una stringa di query come ?bar
, o ?ten+green+apples
è valida.
Trova RFC 3986 qui
isindex
non è significativamente HTML5.
Viene fornito obsoleto per essere utilizzato come primo elemento solo in un modulo e viene inviato senza un nome.
Se il nome della voce è "isindex", il suo tipo è "testo" e questa è la prima voce nel set di dati del modulo, quindi aggiungere il valore da ottenere e saltare il resto dei passi secondari per questa voce, passando al successivo voce, se presente, o il passaggio successivo dell'algoritmo generale altrimenti.
Il flag isindex è solo per uso legacy. I moduli in documenti HTML conformi non genereranno payload che devono essere decodificati con questo set di flag.
L'ultima volta che isindex è stato supportato è stato HTML3 . È usato in HTML5 per fornire una più semplice compatibilità con le versioni precedenti.
Il supporto nelle librerie per questo formato di URI varia tuttavia alcune librerie forniscono supporto legacy per facilitarne l'uso isindex
.
Alcune librerie come l'URI di Perl forniscono metodi per analizzare questo tipo di strutture
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(nessun supporto speciale)Come altro esempio molto più frequente, node.js
prende la via normale e facilita l'analisi come uno dei due
parseQueryString
)La maggior parte delle altre API per l'analisi degli URI seguono qualcosa di simile a questo.
parse_url
, segue un'implementazione simile ma restituisce solo la stringa per la query. Analizzare un oggetto di k=>v
richiedeparse_string()
È valido: vedi Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Componenti di sintassi) .
isindex
magia deprecata name
da HTML5
Questa funzione obsoleta consente all'invio di un modulo di generare tale URL, fornendo ulteriori prove della sua validità per HTML. Per esempio:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
genera un URL di tipo:
?bar
Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
è tuttavia obsoleto come indicato in: https://stackoverflow.com/a/41689431/895245
Come tutte le altre risposte descritte, è perfettamente valido per il controllo, specialmente per cose tipo booleane
Ecco una semplice funzione per ottenere la stringa di query per nome:
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, " "));
}
e ora vuoi verificare se la stringa di query che stai cercando esiste o no, puoi fare una cosa semplice come:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
lo exampleQueryString
sarà false
se la funzione non riesce a trovare la stringa della query, altrimenti lo sarà true
.