Pytanie Pobierz fragment (wartość po haszowaniu "#") z adresu URL w php


Jak mogę uzyskać fragment (wartość po haszowaniu "#") z adresu URL w php?

Powiedz od http://domain.com/site/gallery/1#photo45 chcę photo45


76
2018-02-23 11:03


pochodzenie


@ile en.wikipedia.org/wiki/Hash_symbol - Pekka 웃
Duplikaty lub przynajmniej w tych samych liniach co stackoverflow.com/questions/1957030/..., stackoverflow.com/questions/1162008/... i stackoverflow.com/questions/2181290/... - Gordon
możliwy duplikat Jak uzyskać wartość po haszowaniu w "somepage.php # name"? - PhoneixS


Odpowiedzi:


Jeśli chcesz uzyskać wartość po znaku krzyżyka lub zakotwiczenia, jak pokazano w przeglądarce użytkownika: Nie jest to możliwe w przypadku "standardowego" HTTP, ponieważ ta wartość nigdy nie jest wysyłana do serwera (dlatego nie będzie dostępna w $_SERVER["REQUEST_URI"] lub podobne wstępnie zdefiniowane zmienne). Będziesz potrzebował jakiejś magii JavaScript po stronie klienta, np. włączyć tę wartość jako parametr POST.

Jeśli chodzi tylko o parsowanie znanego adresu URL z dowolnego źródła, to odpowiedź przez mck89 jest jednak idealnie w porządku.


97
2018-02-23 11:05



alert(window.location.hash); - sfussenegger
tylko notatka: window.location.hash dostaniesz cały fragment, W TYM # [hash] sign ... i to jest oczywiście w JavaScript :) - jave.web
BTW: Magia JavaScript: D: D: D: D: D ...var forms = document.getElementsByTagName('form'); for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit',function(){ var hidden = document.createElement("input"); hidden.setAttribute('type','hidden'); hidden.setAttribute('name','fragment'); hidden.setAttribute('value',window.location.hash); this.appendChild(hidden); }); ... w zależności od "metody" twojego formularza otrzymujesz skrót od $_POST['fragment'] lub $_GET['fragment'] .... MAGIA! - jave.web
wartość po hashmarku można uzyskać od strony serwera. Poniżej pokazuję rozwiązanie. - JamesAD-0


Ta część nazywa się "fragment" i możesz ją uzyskać w następujący sposób:

$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment

36
2018-02-23 11:05



To jest bardzo dobre, ale bezbłędnie byłoby dodać `` `fragment = isset ($ url ['fragment'])? "#". $ url ['fragment']: ''; `` `Ale wciąż kciuki! - John Max
działa to dla adresu URL zapisanego w ciągu znaków, a nie faktycznego adresu URL z paska adresu przeglądarki - Muhammad Omer Aslam


A) ma już adres URL z #hash w PHP? Łatwo! Po prostu go sparsuj!

if( strpos( $url, "#" ) === false ) echo "NO HASH !";
   else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0

Lub w "starym" PHP musisz wstępnie przechowywać eksplodowany, aby uzyskać dostęp do tablicy:

$exploded_url = explode( "#", $url ); $exploded_url[1]; 

B) Chcesz uzyskać #hash wysyłając formularz do PHP?
=> Użyj trochę MAGIC JavaScript! (Aby wstępnie przetworzyć formularz)

var forms = document.getElementsByTagName('form'); //get all forms on the site
for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit', //to each form...
function(){ //add a submit pre-processing function that will:
    var hidden = document.createElement("input");  //create an extra input element
    hidden.setAttribute('type','hidden'); //set it to hidden so it doesn't break view 
    hidden.setAttribute('name','fragment');  //set a name to get by it in PHP
    hidden.setAttribute('value',window.location.hash); //set a value of #HASH
    this.appendChild(hidden); //append it to the current form
});

Zależy od Ciebie form„s method atrybut dostajesz ten skrót w PHP przez:
  $_GET['fragment'] lub $_POST['fragment']

Możliwe zwroty: 1. ""[pusty ciąg znaków] (bez skrótów) 2. cały skrót ZAWIERAJĄCY #[hash] sign (ponieważ użyliśmy window.location.hash w JavaScript, który po prostu działa w ten sposób :))

C) Chcesz uzyskać #hash w PHP WŁAŚNIE z żądanego adresu URL?

NIE MOŻESZ!

... (nie biorąc pod uwagę regularnych żądań HTTP) ...

... Mam nadzieję, że to pomogło :)


24
2017-12-09 01:48





Szukałem trochę obejścia tego problemu - i jedyne, co znalazłem, to użycie przepisywania adresów URL do odczytania "kotwicy". Znalazłem w dokumentach apache tutaj http://httpd.apache.org/docs/2.2/rewrite/advanced.html następujące...

Domyślnie przekierowanie do kotwicy HTML nie działa, ponieważ mod_rewrite wymyka się znakowi #, zamieniając go na% 23.   To z kolei przerywa przekierowanie.

Rozwiązanie: Użyj flagi [NE] na RewriteRule. NE oznacza Nie   Ucieczka.

Dyskusja: Ta technika będzie oczywiście działać również z innymi specjalnymi   znaki, które mod_rewrite, domyślnie, koduje URL.

Może mieć inne zastrzeżenia, a co nie ... ale myślę, że przynajmniej robienie czegoś z # na serwerze jest możliwe.


8
2017-11-21 19:48





Nie można uzyskać tekstu po znak hash. Nie jest wysyłane do serwera w żądaniu.


3
2018-02-23 11:05





Znalazłem tę sztuczkę, jeśli nalegasz, chcesz wartość z php .. podziel wartość kotwicy (#) i pobierz ją za pomocą javascript, następnie przechowuj jako plik cookie, po czym uzyskaj wartość cookie za pomocą php ~

http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/ 


3
2017-12-14 03:31





Możesz zrobić zamianę ciągów po stronie klienta, a następnie po stronie serwera. Nie jest to szczególnie solidne rozwiązanie, ale jeśli nie uda ci się znaleźć szybkiego rozwiązania takiego jak ja, to wystarczy.

Klient:

var tempString = stringVal.replace('#', 'hashtag');

Serwer:

$user_message = $_GET['userMessage'];
$user_message = str_replace("hashtag", "#", $user_message);

0
2017-12-13 22:51





Uzyskiwanie danych po hashmark w ciągu zapytania jest proste. Oto przykład, w którym klient uzyskuje dostęp do słownika terminów z książki. Wymaga podania nazwy zakotwiczenia (#tesla) i dostarcza klientowi do tego terminu oraz podświetla termin i jego opis na niebiesko, aby był łatwy do zobaczenia.

A.ustaw swoje ciągi za pomocą id div, więc anchor nazwy idzie tam, gdzie powinien, a javascript może zmienić kolory tekstu

<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>

B. Użyj Javascript, aby wykonać ciężką pracę, po stronie serwera, wstawić na swojej stronie PHP, lub gdziekolwiek ..

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

C. Uruchamiam funkcję java automatycznie po wczytaniu strony.

<script>
$( document ).ready(function() {

D. uzyskać kotwicę (#tesla) z adresu URL otrzymanego przez serwer

var myhash1 = $(location).attr('hash'); //myhash1 == #tesla

E. przyciąć znak skrótu

myhash1 = myhash1.substr(1)  //myhash1 == tesla

F. Muszę podkreślić termin i opis, aby utworzyć nowy var

var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1

G. Teraz mogę manipulować kolorem tekstu dla terminu i opisu

var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>

H. To działa. klient klika łącze po stronie klienta (xyz.com # tesla) i przechodzi w prawo do terminu. termin i opis są wyróżnione na niebiesko przez javascript dla szybkiego czytania .. wszystkie inne wpisy pozostały w kolorze czarnym ..


-3
2018-02-05 02:13



Ta odpowiedź dotyczy tylko obsługi fragmentu po stronie klienta, podczas gdy pytanie dotyczy strony serwera (z PHP). - Martijn Heemels
Po prawidłowym skonfigurowaniu strony klienta, po stronie serwera jest łatwo z PHP. - JamesAD-0