Risposte:
Il problema principale è che il browser non invierà nemmeno una richiesta con una parte frammentata. La parte del frammento viene risolta proprio lì nel browser. Quindi è raggiungibile tramite JavaScript.
Ad ogni modo, potresti analizzare un URL in bit, inclusa la parte del frammento, usando parse_url () , ma ovviamente non è il tuo caso.
Test semplice, accedendo a 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 -
Il server riceve la richiesta senza #appendage - qualsiasi cosa dopo il tag hash è semplicemente una ricerca di ancoraggio sul client.
Puoi trovare il nome di ancoraggio utilizzato all'interno dell'URL tramite javascript usando, ad esempio:
<script>alert(window.location.hash);</script>
La funzione parse_url () in PHP può funzionare se hai già la stringa URL necessaria incluso il frammento ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Ma non credo che PHP riceva le informazioni sui frammenti perché sono solo client.
È recuperabile da Javascript - come window.location.hash
. Da lì è possibile inviarlo al server con Ajax, ad esempio, oppure codificarlo e inserirlo in URL che possono quindi essere passati al lato server.
L'hash non viene mai inviato al server, quindi no.
Sì, è vero, il server non ottiene la parte di ancoraggio. Tuttavia, esiste una soluzione alternativa utilizzando i cookie. Puoi trovarlo qui: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
La risposta è no.
Lo scopo principale dell'hash è scorrere fino a una determinata parte della pagina in cui è stato definito un segnalibro. ad es. Scorrere fino a questa parte quando la pagina viene caricata.
La navigazione scorrerà in modo tale che questa riga sia il primo contenuto visibile nella pagina, a seconda di quanto segue segue la riga.
Sì, JavaScript può accedervi, e quindi una semplice chiamata Ajax farà la magia
Che dire:
Prendi dinamicamente il #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;
?>
Per renderlo più fluido:
Esempio completo usando solo Javascript e 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; ?>
Penso che il valore hash sia usato solo dal lato client, quindi non puoi ottenerlo con php.
potresti reindirizzarlo con javascript a php però.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Questo dovrebbe funzionare
La parte di un URI dopo il #
nome si chiama "frammento" ed è per definizione disponibile / elaborata solo sul lato client (vedere https://en.wikipedia.org/wiki/Fragment_identifier ).
Sul lato client, è possibile accedervi utilizzando javaScript con window.location.hash
.
Si, puoi:
Utilizzare questo metodo per prevenire errori:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
E ovviamente in PHP, esplodi quel cucciolo e ottieni uno dei valori
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Un'altra soluzione è aggiungere un campo di input nascosto alla pagina php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Utilizzando javascript / jQuery è possibile impostare il valore di questo campo sul caricamento della pagina o rispondere a un evento:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
In php sul lato server puoi leggere questo valore usando la raccolta $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
Possiamo farlo anche con un altro approccio, come prima cosa ottenere il valore hash da js e chiamare ajax usando quel parametro e possiamo fare quello che vogliamo
www.example.com/?val=1#part2
dovresti reindirizzare su di esso sul server, in questo modo:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
e ovviamente dovresti aggiungere supporto per reindirizzare a quell'altro URL nell'altra pagina. Non eccezionale, e ovviamente non funziona per tutti i casi d'uso, ma funziona anche per i segnalibri. Tieni presente che se lo fai, non dovresti consentire i reindirizzamenti agli URL assoluti, solo gli URL relativi, per assicurarti di non aprirti a reindirizzamenti non sicuri