Réponses:
Le principal problème est que le navigateur n'enverra même pas de demande avec une partie fragmentée. La partie fragment est résolue directement dans le navigateur. Il est donc accessible via JavaScript.
Quoi qu'il en soit, vous pouvez analyser une URL en bits, y compris la partie fragment, en utilisant parse_url () , mais ce n'est évidemment pas votre cas.
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 #appendage - tout ce qui se trouve après la balise de hachage est simplement une recherche d'ancrage sur le client.
Vous pouvez trouver le nom de l'ancre utilisé dans l'URL via 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 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 elles sont réservées au client.
Il est récupérable à partir de Javascript - as window.location.hash
. De là, vous pouvez l'envoyer au serveur avec Ajax par exemple, ou le coder et le mettre dans des URL qui peuvent ensuite être transmises au serveur.
Le hachage n'est jamais envoyé au serveur, donc non.
Oui c'est vrai, le serveur ne reçoit pas la partie d'ancrage. Cependant, il existe une solution de contournement en utilisant des 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.
Le but principal du hachage est de faire défiler jusqu'à une certaine partie de la page où vous avez défini un signet. Par exemple, faites défiler jusqu'à cette partie lorsque la page se charge.
La navigation défilera de manière à ce que cette ligne soit le premier contenu visible de la page, selon la quantité de contenu qui suit sous la ligne.
Oui javascript peut y accéder, puis un simple appel ajax fera la magie
Qu'en est-il de:
Saisissez dynamiquement le #hash
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
//alert(txthash);
</script>
<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>
Pour le rendre plus fluide:
Exemple complet utilisant uniquement Javascript et PHP
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
function changehash(a,b){
window.location.hash = b; //add hash to url
//alert(b); //alert to test
location.reload(); //reload page to show the current hash
}
</script>
<?php $hash = "<script>document.writeln(txthash);</script>";?>
<a onclick="changehash(this,'#hash1')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/>
<?php echo "This is the current hash: " . $hash; ?>
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 cependant le rediriger avec javascript vers php.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
C'est devrait fonctionner
La partie d'un URI après #
est appelée "fragment" et est par définition uniquement disponible / traitée côté client (voir https://en.wikipedia.org/wiki/Fragment_identifier ).
Côté client, cela est accessible en utilisant javaScript avec window.location.hash
.
Oui, vous pouvez:
Utilisez cette méthode pour éviter les erreurs:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
Et bien sûr en PHP, faites exploser ce chiot et obtenez l'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
Une autre solution consiste à ajouter un champ de saisie masqué à la page php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
En utilisant javascript / jQuery, vous pouvez définir la valeur de ce champ lors du 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'];
Nous pouvons le faire avec une autre approche aussi, comme tout d'abord obtenir la valeur de hachage de js et appeler ajax en utilisant ce paramètre et faire ce que nous voulons
www.example.com/?val=1#part2
vous devrez rediriger vers celui-ci sur le serveur, comme ceci:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
et bien sûr, vous devrez ajouter du 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 devez pas autoriser les redirections vers des URL absolues, uniquement des URL relatives, pour vous assurer de ne pas vous ouvrir à des redirections dangereuses