226 votes

Puis-je lire la partie hachée de l'URL dans mon application côté serveur (PHP, Ruby, Python, etc.) ?

En supposant une URL de :

www.example.com/?val=1#part2

PHP peut lire les variables de la requête val1 en utilisant le tableau GET.

Est la valeur de hachage part2 également lisible ? Ou cela dépend-il uniquement du navigateur et de JavaScript ?

211voto

Ionuț G. Stan Points 62482

Le principal problème est que le navigateur n'enverra même pas une requête avec une partie de fragment. La partie fragmentaire est résolue directement dans le navigateur. Elle est donc accessible par JavaScript.

Quoi qu'il en soit, vous pouvez analyser une URL en bits, y compris la partie fragmentée, à l'aide de la méthode suivante parse_url() mais ce n'est manifestement pas votre cas.

101voto

tom Points 1278

Test simple, accès http://localhost:8000/hello?foo=bar#this-is-not-sent-to-server

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -

Le serveur reçoit la demande sans le #appendage - tout ce qui suit la balise dièse est simplement une recherche d'ancre sur le client.

Vous pouvez trouver le nom de l'ancre utilisé dans l'URL par le biais de javascript en utilisant, par exemple :

<script>alert(window.location.hash);</script>

La fonction parse_url() en PHP peut fonctionner si vous avez déjà la chaîne d'URL nécessaire, y compris le fragment ( http://codepad.org/BDqjtXix ) :

<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>

Output: fizzbuzz

Mais je ne pense pas que PHP reçoive les informations sur les fragments, car il n'est que client.

48voto

Alister Bulman Points 12913

Il peut être récupéré à partir de Javascript - comme window.location.hash . À partir de là, vous pouvez l'envoyer au serveur avec Ajax par exemple, ou le coder et le placer dans des URL qui peuvent ensuite être transmises au côté serveur.

1 votes

Merci ! Donc pour être clair, au lieu de ça : www.example.com/?val=1#part2 Il faudrait rediriger vers lui sur le serveur, comme ceci : www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2 et bien sûr, vous devrez ajouter un support pour rediriger vers cette autre url dans votre autre page. Ce n'est pas génial, et cela ne fonctionne pas pour tous les cas d'utilisation bien sûr, mais cela fonctionne pour les signets. Notez que si vous faites cela, vous ne devez pas autoriser les redirections vers des urls absolues, mais uniquement vers des urls relatives, afin de vous assurer que vous ne vous exposez pas au risque de redirections dangereuses

26voto

PatrikAkerstrand Points 23968

Le hachage n'est jamais envoyé au serveur, donc non.

8voto

VangelisB Points 176

Oui, c'est vrai, le serveur ne reçoit pas la partie de l'ancre. Cependant, il existe une solution de contournement en utilisant les cookies. Vous pouvez le trouver ici : http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

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