Antworten:
Das Hauptproblem ist, dass der Browser nicht einmal eine Anfrage mit einem Fragmentteil sendet. Der Fragmentteil wird genau dort im Browser aufgelöst. Es ist also über JavaScript erreichbar.
Wie auch immer, Sie könnten eine URL mit parse_url () in Bits analysieren, einschließlich des Fragmentteils , aber das ist offensichtlich nicht Ihr Fall.
Einfacher Test, Zugriff auf http: // localhost: 8000 / hello? Foo = bar # Dies wird nicht an den Server gesendet
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 -
Der Server empfängt die Anforderung ohne #appendage - alles, was nach dem Hash-Tag steht, ist einfach eine Ankersuche auf dem Client.
Sie finden den in der URL verwendeten Ankernamen über Javascript als Beispiel:
<script>alert(window.location.hash);</script>
Die Funktion parse_url () in PHP kann funktionieren, wenn Sie bereits die erforderliche URL-Zeichenfolge einschließlich des Fragments ( http://codepad.org/BDqjtXix ) haben:
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Ich glaube jedoch nicht, dass PHP die Fragmentinformationen empfängt, da diese nur für Clients bestimmt sind.
Es kann aus Javascript abgerufen werden - as window.location.hash
. Von dort aus können Sie es beispielsweise mit Ajax an den Server senden oder verschlüsseln und in URLs einfügen, die dann an den Server weitergeleitet werden können.
Der Hash wird niemals an den Server gesendet, also nein.
Ja, es stimmt, der Server erhält das Ankerteil nicht. Es gibt jedoch eine Problemumgehung mit Cookies. Sie finden es hier: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
Die Antwort ist nein.
Der Hauptzweck des Hash besteht darin, zu einem bestimmten Teil der Seite zu scrollen, auf dem Sie ein Lesezeichen definiert haben. zB Scrollen Sie zu diesem Teil, wenn die Seite geladen wird.
Beim Durchsuchen wird so gescrollt, dass diese Zeile der erste sichtbare Inhalt auf der Seite ist, je nachdem, wie viel Inhalt unter der Zeile folgt.
Ja, Javascript kann darauf zugreifen, und dann erledigt ein einfacher Ajax-Aufruf die Magie
Wie wäre es mit:
Schnapp dir dynamisch den #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;
?>
Um es flüssiger zu machen:
Vollständiges Beispiel mit nur Javascript und 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; ?>
Ich denke, der Hash-Wert wird nur clientseitig verwendet, so dass Sie es nicht mit PHP bekommen können.
Sie könnten es jedoch mit Javascript auf PHP umleiten.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Das sollte funktionieren
Der Teil einer URI nach dem #
heißt "Fragment" und ist per Definition nur auf der Clientseite verfügbar / verarbeitet (siehe https://en.wikipedia.org/wiki/Fragment_identifier) ).
Auf der Client-Seite kann mit JavaScript mit darauf zugegriffen werden window.location.hash
.
Ja, du kannst:
Verwenden Sie diese Methode, um Fehler zu vermeiden:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
Und natürlich in PHP, explodieren Sie diesen Welpen und erhalten Sie einen der Werte
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Eine andere Lösung besteht darin, der PHP-Seite ein verstecktes Eingabefeld hinzuzufügen:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Mit Javascript / jQuery können Sie den Wert dieses Felds beim Laden der Seite oder beim Reagieren auf ein Ereignis festlegen:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
In PHP auf der Serverseite können Sie diesen Wert mit der $ _POST-Auflistung lesen:
$server_location_hash = $_POST['myHiddenLocationHash'];
Wir können es auch mit einem anderen Ansatz tun. Als erstes erhalten wir den Hash-Wert von js und rufen den Ajax mit diesem Parameter auf und können tun, was wir wollen
www.example.com/?val=1#part2
Sie müssten auf dem Server wie folgt darauf umleiten:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
und natürlich müssten Sie Unterstützung hinzufügen, um auf diese andere URL auf Ihrer anderen Seite umzuleiten. Nicht großartig und funktioniert natürlich nicht für alle Anwendungsfälle, aber für Lesezeichen. Beachten Sie, dass Sie in diesem Fall keine Weiterleitungen zu absoluten URLs zulassen sollten, sondern nur zu relativen URLs, um sicherzustellen, dass Sie sich nicht für unsichere Weiterleitungen