161 votes

Formation correcte d'une URL avec une chaîne de requête et un hashtag d'ancrage

Lorsqu'une chaîne de requête et une balise d'ancrage (balise de hachage) sont visibles dans une URL, dans quel ordre doivent-elles apparaître ?

http://www.whatever.com?var=val#anchor

o

http://www.whatever.com#anchor?var=val

Existe-t-il une documentation à ce sujet ?

Les URLs sont gérés par WordPress / PHP.

208voto

Ryan Points 1893
?var=var#hash

Tout après # est côté client.

Aussi, regardez Réécriture d'URL pour se débarrasser de la laideur ?var=var .

106voto

billy Points 1215

? devrait venir avant le #. comme indiqué dans RFC 3986 :

relative-ref = relative-part [ "?" query ] [ "#" fragment ]

Tiré d'une réponse sur le site Super User ( Une balise d'ancrage vient-elle avant ou après la chaîne de requête ? ) :

5voto

Teacher Michael Points 51

Notez que lorsque l'URL comporte à la fois des balises d'ancrage (#) et des chaînes d'interrogation ( ?), le navigateur peut ignorer la chaîne d'interrogation et se rendre à la balise d'ancrage sans recharger la page.

Il peut s'avérer nécessaire de soumettre la page à l'aide d'un fichier

<form action='webpage.php?q=string#tag' method='GET or POST'>
    <input type='text' id='q' name='q' value='string'>
    <input type='submit' value='submit'>
</form>

plutôt qu'un simple lien URL

<a href='webpage.php?q=string#tag'>.

2voto

LIUFA Points 3642

Si l'intention d'utiliser # est de désigner un page fragment entonces - oui ? y luego # .

Si # arrive avant ? et ce n'est pas pour dénoter une page fragment (cela peut se produire lorsque # fait partie de l'autorité (nom d'utilisateur et mot de passe)), il doit être codé ou vous avez des problèmes. Il en va de même pour tout autre caractère spécial ( : , @ ...) qui pourraient donner une signification différente à l'URL.

1voto

Vous pouvez placer ce code JavaScript dans la partie commune de votre site pour forcer la redirection de toutes les demandes incorrectes vers l'analogue dans le bon ordre :

<script>
    var p=location.hash.indexOf("?");
    if(p>=0){
        var goodLoc = location.href.replace(location.hash, "");
        location.replace(goodLoc + window.location.hash.substring(p) + window.location.hash.substring(0, p));
    }
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X