Puis-je lire la partie hash de l’URL de 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 requête val1 utilisant le tableau GET.

La valeur de hachage part2 également lisible? Ou est-ce uniquement dans le navigateur et JavaScript?

Le principal problème est que le navigateur n’envoie même pas de requête avec une partie fragmentée. La partie fragment est résolue directement dans le navigateur. Donc, il est accessible via JavaScript.

Quoi qu’il en soit, vous pouvez parsingr une URL en bits, y compris la partie fragment, en utilisant parse_url () , mais ce n’est évidemment pas votre cas.

Test simple, accéder à http: // localhost: 8000 / hello? Foo = bar # this-is-non-envoyé au serveur

 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 vient après le tag de hachage est simplement une recherche d’ancre sur le client.

Vous pouvez trouver le nom d’ancrage utilisé dans l’URL via javascript en utilisant, par exemple:

  

La fonction parse_url () de PHP peut fonctionner si vous avez déjà la chaîne URL requirejse, 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 elles ne sont que des clients.

Il est récupérable depuis Javascript – en tant que window.location.hash . À partir de là, vous pouvez, par exemple, l’envoyer au serveur avec Ajax ou l’encoder et le placer dans des URL qui peuvent ensuite être transmises au serveur.

Le hachage n’est jamais envoyé au serveur, alors non.

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

La réponse est non.

L’objective principal du hachage est de faire défiler une partie de la page où vous avez défini un signet. Faites défiler jusqu’à cette partie lorsque la page se charge.

Le parcours défilera de sorte que cette ligne soit le premier contenu visible de la page, en fonction de la quantité de contenu qui suit la ligne.

Oui javascript peut y accéder, puis un simple appel ajax fera la magie

Je pense que la valeur de hachage n’est utilisée que côté client, donc vous ne pouvez pas l’obtenir avec php.

vous pouvez le redirect avec javascript pour php cependant.

 < ?php $url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 "); echo $url["fragment"]; //This variable contains the fragment ?> 

Ceci devrait fonctionner

La partie d’un URI après le # s’appelle “fragment” et n’est par définition disponible / traitée que du côté client (voir https://en.wikipedia.org/wiki/Fragment_identifier ).

Du côté client, il est possible d’accéder à javaScript avec window.location.hash .

Oui, vous pouvez:

Utilisez cette méthode pour éviter les erreurs:

  

Et bien sûr en PHP, exploser ce chiot et obtenir une des valeurs

 $split = explode('/', $_COOKIE['anchor']); print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag 

Nous pouvons aussi le faire avec une autre approche, comme tout d’abord obtenir la valeur de hachage de js et appeler ajax en utilisant ce paramètre et peut faire ce que nous voulons

Une autre solution consiste à append un champ de saisie caché à la page php:

  

En utilisant javascript / jQuery, vous pouvez définir la valeur de ce champ sur le chargement de la page ou répondre à un événement:

 $('#myHiddenLocationHash').val(document.location.hash.replace('#','')); 

En php côté serveur, vous pouvez lire cette valeur en utilisant la collection $ _POST:

 $server_location_hash = $_POST['myHiddenLocationHash'];