Odpowiedzi:
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.
Hash nigdy nie jest wysyłany na serwer, więc nie.
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/
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ę
Co powiesz na:
Dynamicznie chwyć # skrót
<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;
?>
Aby uczynić go bardziej płynnym:
Pełny przykład z wykorzystaniem tylko Javascript i 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; ?>
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.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
To powinno działać
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
.
Tak, możesz:
Użyj tej metody, aby zapobiec błędom:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
I oczywiście w PHP, eksploduj tego szczeniaka i zdobądź jedną z wartości
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Innym rozwiązaniem jest dodanie ukrytego pola wejściowego do strony php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Za pomocą javascript / jQuery możesz ustawić wartość tego pola na ładowanie strony lub reagowanie na zdarzenie:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
W php po stronie serwera możesz odczytać tę wartość za pomocą kolekcji $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
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
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 przekierowania