Angenommen, eine URL von:
www.example.com/?val=1#part2
PHP kann die Anforderungsvariablen val1
mithilfe des GET-Arrays lesen .
Ist der Hashwert part2
auch lesbar? Oder liegt das nur am Browser und an JavaScript?
quelle
Angenommen, eine URL von:
www.example.com/?val=1#part2
PHP kann die Anforderungsvariablen val1
mithilfe des GET-Arrays lesen .
Ist der Hashwert part2
auch lesbar? Oder liegt das nur am Browser und an JavaScript?
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.
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 WeiterleitungenDer Hash wird niemals an den Server gesendet, also nein.
quelle
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/
quelle
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
quelle
Wie wäre es mit:
Schnapp dir dynamisch den #hash
Um es flüssiger zu machen:
Vollständiges Beispiel mit nur Javascript und PHP
quelle
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.
quelle
Das sollte funktionieren
quelle
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
.quelle
Ja, du kannst:
Verwenden Sie diese Methode, um Fehler zu vermeiden:
Und natürlich in PHP, explodieren Sie diesen Welpen und erhalten Sie einen der Werte
quelle
Eine andere Lösung besteht darin, der PHP-Seite ein verstecktes Eingabefeld hinzuzufügen:
Mit Javascript / jQuery können Sie den Wert dieses Felds beim Laden der Seite oder beim Reagieren auf ein Ereignis festlegen:
In PHP auf der Serverseite können Sie diesen Wert mit der $ _POST-Auflistung lesen:
quelle
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
quelle