Est-ce une url comme http://example.com/foo?bar
valide?
Je cherche un lien vers quelque chose d'officiel qui dit d'une manière ou d'une autre. Une simple réponse oui/non ou des preuves anecdotiques ne suffiront pas.
Le RI RFC ne requiert pas de format pour la chaîne de requête. Bien qu'il soit reconnu que la chaîne de requête comportera souvent des paires nom-valeur, elle n'est pas obligatoire (par exemple, elle contiendra souvent un autre URI).
3.4. Question
Le composant de requête contient des données non hiérarchiques qui, avec les données du composant de chemin d'accès (Section 3.3), servent à identifier une ressource dans la portée du schéma et de l'autorité de dénomination de l'URI (le cas échéant). ...
... Cependant, les composants de requête étant souvent utilisés pour transporter des informations d'identification sous la forme de paires "clé = valeur" et une valeur fréquemment utilisée est une référence à un autre URI, ...
HTML établit qu'un formulaire soumis via HTTP GET devrait coder les valeurs de formulaire sous forme de paires nom-valeur sous la forme "? clé1 = valeur1 & clé2 = valeur2 ..." (correctement encodé). L'analyse de la chaîne de requête dépend du code côté serveur (par exemple Java) du moteur de servlet).
Vous n'identifiez pas la structure côté serveur que vous utilisez, le cas échéant, mais il est possible que votre structure côté serveur présume que la chaîne de requête sera toujours en paires nom-valeur et qu'elle risque de s'étouffer avec une chaîne de requête qui n'est pas dans ce format (par exemple, ?bar
). Si c'est votre propre code personnalisé analysant la chaîne de requête, vous devez simplement vous assurer de gérer ce format de chaîne de requête. Si c'est un framework, vous devrez consulter votre documentation ou simplement la tester pour voir comment elle est gérée.
Ils sont parfaitement valables. Vous pourriez les considérer comme l’équivalent du grand gars musclé qui se tient silencieusement derrière le messager de la foule. Le gars n'a pas de nom et ne parle pas, mais sa simple présence transmet des informations.
"Le schéma" http "permet de localiser les ressources réseau via le protocole HTTP. Cette section définit la syntaxe et la sémantique propres au schéma pour les URL http." http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" Host [ ":" port ] [ abs_path [ "?" query ]]
Alors oui, tout est valable après un point d'interrogation. Votre serveur peut interpréter différemment, mais de façon anecdotique , vous pouvez voir que certaines langues traitent cela comme une valeur booléenne qui est vraie si elle est listée.
Oui, c'est valide.
Si on veut simplement vérifier si le paramètre existe ou non, c'est une façon de le faire.
La seule partie pertinente de la spécification d'URI est de savoir tout entre le premier ?
Et le premier #
Correspond à la définition de la requête donnée par la spécification. Il peut inclure des caractères tels que [:/.?]
. Cela signifie qu'une chaîne de requête telle que ?bar
Ou ?ten+green+apples
Est valide.
Trouvez le RFC 3986 ici
isindex
n'est pas HTML5 de manière significative.
Il est fourni obsolète pour être utilisé comme premier élément d'un formulaire et est soumis sans nom.
Si le nom de l'entrée est "isindex", son type est "text" et qu'il s'agit de la première entrée du jeu de données de formulaire, ajoutez ensuite la valeur au résultat et ignorez le reste des sous-étapes de cette entrée pour passer à la suivante. l’entrée, le cas échéant, ou l’étape suivante de l’algorithme général autrement.
Le drapeau isindex est réservé à l'usage hérité. Les formulaires dans des documents HTML conformes ne génèrent pas de charges utiles qui doivent être décodées avec cet ensemble d'indicateurs.
La dernière fois isindex était pris en charge était HTML . Son utilisation en HTML5 est de fournir une compatibilité ascendante plus facile.
La prise en charge de ce format d'URI dans les bibliothèques varie. Toutefois, certaines bibliothèques fournissent une prise en charge héritée pour faciliter l'utilisation de isindex
.
Certaines bibliothèques comme RI de Perl fournissent des méthodes pour analyser ce type de structures
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(pas de support spécial)Comme autre exemple beaucoup plus fréquent, node.js
Prend la route normale et facilite l’analyse en tant que
parseQueryString
)La plupart des autres API d’analyse d’URI suivent un comportement similaire à celui-ci.
parse_url
, suit comme une implémentation similaire mais ne renvoie que la chaîne de la requête. L'analyse dans un objet de k=>v
Nécessite parse_string()
Il est valide: voir Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Composants de syntaxe) .
isindex
obsolète magie name
de HTML5
Cette fonctionnalité obsolète permet à un formulaire de générer une telle URL, fournissant ainsi une preuve supplémentaire de sa validité pour HTML. Par exemple.:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
génère une URL de type:
?bar
Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
est toutefois obsolète comme indiqué à: https://stackoverflow.com/a/41689431/895245
Comme toutes les autres réponses décrites, il est parfaitement valide pour le contrôle, spécialement pour les choses de type booléen
Voici une fonction simple pour obtenir la chaîne de requête par nom:
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, " "));
}
et maintenant vous voulez vérifier si la chaîne de requête que vous recherchez existe ou non, vous pouvez faire une chose simple comme:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
la exampleQueryString
sera false
si la fonction ne trouve pas la chaîne de requête, sinon elle sera true
.