Test simple, l'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 #appendage - quoi que ce soit après la balise de hachage est simplement une recherche d'ancrage sur le client.
Vous pouvez trouver le nom d'ancrage utilisé dans l'URL via JavaScript en utilisant, à titre d'exemple:
<script>alert(window.location.hash);</script>
La fonction parse_url() en PHP peut fonctionner que si vous avez déjà la chaîne 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çoit les informations de fragment, car il est client seulement.
Merci! Donc, pour être clair, à la place de ceci: 'www.example.com/? Val = 1 # part2' Vous auriez à rediriger vers 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. Pas génial, et ne fonctionne pas pour tous les cas d'utilisation bien sûr, mais fonctionne pour les signets. Notez que si vous faites cela, vous ne devriez pas autoriser les redirections vers des urls absolues, seulement des URLs relatives, pour vous assurer que vous ne vous ouvrez pas à des [redirections dangereuses] (https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet) –