Zakładając adres URL:
www.example.com/?val=1#part2
PHP może odczytać zmienne żądania val1
za pomocą tablicy GET.
Czy wartość skrótu jest part2
również czytelna? A może jest to tylko przeglądarka i JavaScript?
Zakładając adres URL:
www.example.com/?val=1#part2
PHP może odczytać zmienne żądania val1
za pomocą tablicy GET.
Czy wartość skrótu jest part2
również czytelna? A może jest to tylko przeglądarka i JavaScript?
Głównym problemem jest to, że przeglądarka nawet nie wyśle żądania z fragmentem fragmentu. Fragment jest rozwiązywany bezpośrednio w przeglądarce. Jest to możliwe dzięki JavaScript.
W każdym razie możesz parsować adres URL na bity, w tym fragment fragmentu, używając parse_url () , ale oczywiście nie jest to twój przypadek.
Prosty test, dostęp do 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 -
Serwer odbiera żądanie bez #appendage - wszystko po znaczniku hash jest po prostu szukaniem zakotwiczenia na kliencie.
Możesz znaleźć nazwę kotwicy używaną w adresie URL za pomocą javascript, używając na przykład:
<script>alert(window.location.hash);</script>
Funkcja parse_url () w PHP może działać, jeśli masz już potrzebny ciąg adresu URL zawierający fragment ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Ale nie sądzę, że PHP otrzymuje informacje o fragmentach, ponieważ są one przeznaczone tylko dla klientów.
Można go odzyskać z Javascript - as window.location.hash
. Stamtąd możesz wysłać go na serwer za pomocą Ajax, na przykład, lub zakodować i umieścić w adresach URL, które mogą być następnie przekazywane po stronie serwera.
www.example.com/?val=1#part2
musiałbyś przekierować do niego na serwerze, w ten sposób:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
i oczywiście musisz dodać obsługę, aby przekierować do tego innego adresu URL na drugiej stronie. Nie niesamowite i oczywiście nie działa we wszystkich przypadkach użycia, ale działa w przypadku zakładek. Pamiętaj, że jeśli to zrobisz, nie powinieneś zezwalać na przekierowania na bezwzględne adresy URL, tylko względne adresy URL, aby mieć pewność, że nie otworzysz się na niebezpieczne przekierowaniaHash nigdy nie jest wysyłany na serwer, więc nie.
źródło
Tak, to prawda, serwer nie otrzymuje części zakotwiczenia. Istnieje jednak obejście polegające na stosowaniu plików cookie. Można go znaleźć tutaj: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
źródło
Odpowiedź brzmi nie.
Głównym celem skrótu jest przewinięcie do określonej części strony, na której zdefiniowano zakładkę. np. Przewiń do tej części po załadowaniu strony.
Przeglądanie będzie przewijane w taki sposób, że ten wiersz jest pierwszą widoczną treścią na stronie, w zależności od tego, ile treści znajduje się poniżej tego wiersza.
Tak, javascript może uzyskać do niego dostęp, a wtedy proste wywołanie ajax zrobi magię
źródło
Co powiesz na:
Dynamicznie chwyć # skrót
Aby uczynić go bardziej płynnym:
Pełny przykład z wykorzystaniem tylko Javascript i PHP
źródło
Myślę, że wartość skrótu jest używana tylko po stronie klienta, więc nie można jej uzyskać za pomocą php.
możesz jednak przekierować go za pomocą javascript do php.
źródło
To powinno działać
źródło
Część identyfikatora URI po
#
nazwie nazywa się „fragmentem” i jest z definicji dostępna / przetwarzana tylko po stronie klienta (patrz https://en.wikipedia.org/wiki/Fragment_identifier ).Po stronie klienta można to uzyskać za pomocą javaScript za pomocą
window.location.hash
.źródło
Tak, możesz:
Użyj tej metody, aby zapobiec błędom:
I oczywiście w PHP, eksploduj tego szczeniaka i zdobądź jedną z wartości
źródło
Innym rozwiązaniem jest dodanie ukrytego pola wejściowego do strony php:
Za pomocą javascript / jQuery możesz ustawić wartość tego pola na ładowanie strony lub reagowanie na zdarzenie:
W php po stronie serwera możesz odczytać tę wartość za pomocą kolekcji $ _POST:
źródło
Możemy to zrobić również przy użyciu innego podejścia, na przykład najpierw pobierz wartość skrótu z js i wywołaj ajax za pomocą tego parametru i możemy zrobić, co chcemy
źródło