2009-07-21 16 views
8

Próbuję znaleźć sposób na zapisanie fragmentu hasha adresu URL i jako zmiennej PHP. Ten pomysł jest trochę zwariowana, ale pokrywa się ze mną ...PHP & Hash/Fragment Fragment adresu URL

Chciałbym, aby wyodrębnić „Location” fragment z następującego adresu URL i zapisać go jako zmienna PHP.

http://www.example.com/#location 

Jednak dyskusja pod tym numerem link wskazuje, że fragment adresu URL jest dostępny tylko za pośrednictwem JavaScript.

Ale byłoby to możliwe, aby utworzyć link, gdzie fragment jest powielany w adresie URL, analizowane przez PHP, a następnie usuwane przez mod rewrite? Tak ....

Original URL:

http://www.example.com/location/#location 

PHP dostaje lokalizacji zmienne dzięki zwykłym "miejscu" w adresie URL

Apache następnie przepisuje link:

http://www.example.com/#location 

Jestem ciekawy, czy istnieje elegancki sposób rozwiązania tego problemu.

+2

Można zmienić fragment do wartości _GET $? –

+0

Nie, nie możesz. Zobacz moją odpowiedź –

+0

Oto rozwiązanie wykorzystujące javascript i ukryte pole wejściowe http://stackoverflow.com/questions/940905/can-i-read-the-hash-portion-of-the-url-on-my-server -to-aplikacja-php-ruby/43119226 # 43119226 –

Odpowiedz

0

można wysłać fragment hash za pośrednictwem AJAX do skryptu PHP i zrobić natychmiastowe odświeżenie (przeładowanie strony)

5

fragment nie jest wysyłana do serwera, zgodnie z tym thread na forach mod_rewrite. To może być niemożliwe, chyba że używasz AJAX, aby zmienić stronę po fakcie.

Innym pomysłem byłoby mieć włączyć JavaScript hash do $ _GET paramater, a następnie odśwież stronę.

+0

Dzięki za odpowiedzi! Wiem, że fragment nigdy nie jest wysyłany na serwer.Proponuję "pseudo fragment" lub "podwójny fragment", taki jak http://www.example.com/fragment/#fragment Pierwszy fragment zostanie zinterpretowany przez PHP, a następnie usunięty przez mod_rewrite, renderowanie adresu URL jako http://www.example.com/#fragment Może to podejście nie ma sensu; Nie jestem pewien, czy tak jest, stąd moje pytanie ... –

+0

Jeśli chcesz wysłać tę osobę z powrotem do example.com/#fragment, wyślesz ją do example.com/framework, a następnie PHP może przekazać je do przykładu .com/# fragement. –

+0

Świetny pomysł, aby przekazać użytkownika z "example.com/fragment" do "example.com/#fragment". Wykorzystam plik cookie, aby zapisać fragment, a następnie przesłać stronę do siebie. Coś takiego może działać: Przykład: związek: http://www.example.com/test.php?fragment=turkey $ fragment = $ _ GET [ 'fragment']; if (isset ($ fragment)) { setcookie ("TestCookie", "TestCookie", time() + 3600); nagłówek ("Lokalizacja: http://www.example.com/test.php/#$fragment"); } // Wykonaj dodatkowe czynności na podstawie cookie –

9

Aby to przeczytać, musisz użyć Javascript. Istnieje kilka różnych opcji - po wczytaniu strony można użyć żądania XmlHTTPRequest (żądanie AJAX), aby poinformować serwer o dodatkowych parametrach adresu URL. Alternatywnie możesz sprawdzić, czy istnieją dodatkowe parametry (również przez Javascript), a jeśli znajdziesz, zamieścić inny adres URL, który ma te parametry zakodowane w samym adresie URL.

0

Po wysłaniu wartości do serwera za pośrednictwem AJAX. Możesz ustawić wartości fragmentów w SESJI. Po odświeżeniu strony możesz pobrać fragment, który został ustawiony w sesji i przetworzyć, a następnie wyświetlić odpowiednią treść. Ponieważ nie możemy uzyskać wartości fragmentów poprzez PHP_SELF/QUERY_STRING i itp. Potrzebujemy tego, aby zwiększyć szybkość naszej strony internetowej, takiej jak Gmail.

-2

Jest zawarty w wartości "fragmentu" zwróconej z PHP's parse_url function.

Z podręcznika PHP:

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_PATH); 
?> 

Wrócimy:

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 
/path 
+2

Jest to prawdą, jeśli Fragment jest ręcznie dostarczany do tej funkcji, ale problem związany z pierwotnym pytaniem jest taki, że część fragmentu nie jest wysyłana do serwera. – halfer