Jak mogę zaznaczyć fragment po symbolu „#” w moim adresie URL za pomocą PHP?
Wynik, który chcę, to „zdjęcie45”.
Oto przykładowy adres URL:
http://example.com/site/gallery/1#photo45
Jak mogę zaznaczyć fragment po symbolu „#” w moim adresie URL za pomocą PHP?
Wynik, który chcę, to „zdjęcie45”.
Oto przykładowy adres URL:
http://example.com/site/gallery/1#photo45
Odpowiedzi:
Jeśli chcesz uzyskać wartość po znaku krzyżyka lub kotwicy, jak pokazano w przeglądarce użytkownika: Nie jest to możliwe w przypadku „standardowego” protokołu HTTP, ponieważ ta wartość nigdy nie jest wysyłana na serwer (dlatego nie będzie dostępna w $_SERVER["REQUEST_URI"]
lub podobnych predefiniowane zmienne). Potrzebowałbyś jakiegoś rodzaju magii JavaScript po stronie klienta, np. Aby uwzględnić tę wartość jako parametr POST.
Jeśli chodzi tylko o parsowanie znanego adresu URL z dowolnego źródła, odpowiedź mck89 jest jednak w porządku.
alert(window.location.hash);
window.location.hash
dostajesz cały fragment, W TYM #
znak [hash] ... i jest to oczywiście w JavaScript :)
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 hash przez $_POST['fragment']
lub $_GET['fragment']
.... MAGIC!
Ta część nazywa się „fragmentem” i możesz ją pobrać w ten sposób:
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
$fragment = parse_url("http://example.com/site/gallery/1#photo45", PHP_URL_FRAGMENT);
if( strpos( $url, "#" ) === false ) echo "NO HASH !";
else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0
Lub w "starym" PHP, aby uzyskać dostęp do tablicy, musisz wstępnie zapisać plik rozstrzelony:
$exploded_url = explode( "#", $url ); $exploded_url[1];
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
});
W zależności od form
„s method
atrybut pojawi się ten skrót w PHP przez:
$_GET['fragment']
lub$_POST['fragment']
Możliwe zwroty: 1. ""
[pusty ciąg] (bez krzyżyka) 2. cały hash WŁĄCZAJĄC #
znak [hash] (ponieważ użyliśmy znaku window.location.hash
JavaScript, który po prostu działa w ten sposób :))
... (nie biorąc pod uwagę zwykłych żądań HTTP) ...
... Mam nadzieję, że to pomogło :)
Od jakiegoś czasu szukałem obejścia tego problemu - i jedyne, co znalazłem, to użycie funkcji ponownego zapisywania adresów URL w celu 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 znak #, zamieniając go na% 23. To z kolei przerywa przekierowanie.
Rozwiązanie: użyj flagi [NE] w RewriteRule. NE oznacza No Escape.
Dyskusja: Ta technika będzie oczywiście działać również z innymi znakami specjalnymi, które mod_rewrite domyślnie kodują URL.
Może mieć inne zastrzeżenia, a co nie ... ale myślę, że przynajmniej zrobienie czegoś z # na serwerze jest możliwe.
Nie możesz pobrać tekstu po znaku krzyżyka . Nie jest wysyłany do serwera w żądaniu.
Znalazłem tę sztuczkę, jeśli nalegasz, aby wartość w PHP. podziel wartość anchor ( #
) i pobierz ją za pomocą JavaScript, następnie zapisz jako plik cookie, a następnie pobierz wartość pliku cookie za pomocą PHP
Możesz to zrobić za pomocą kombinacji javascript i php:
<div id="cont"></div>
I po drugiej stronie;
<script>
var h = window.location.hash;
var h1 = (win.substr(1));//string with no #
var q1 = '<input type="text" id="hash" name="hash" value="'+h1+'">';
setInterval(function(){
if(win1!="")
{
document.querySelector('#cont').innerHTML = q1;
} else alert("Something went wrong")
},1000);
</script>
Następnie podczas przesyłania formularza możesz pobrać wartość za pomocą $ _POST ['hash'] (ustaw formularz)
Jeśli chcesz dynamicznie pobierać hash z adresu URL, powinno to działać: https://stackoverflow.com/a/57368072/2062851
<script>
var hash = window.location.hash, //get the hash from url
cleanhash = hash.replace("#", ""); //remove the #
//alert(cleanhash);
</script>
<?php
$hash = "<script>document.writeln(cleanhash);</script>";
echo $hash;
?>
Najpierw musisz przeanalizować adres URL, więc wygląda to tak:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Jeśli chcesz przeanalizować rzeczywisty adres URL bieżącej przeglądarki, musisz poprosić o połączenie z serwerem.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
ma nie obejmować #fragment
Pobieranie danych po znaku skrótu w ciągu zapytania jest proste. Oto przykład używany, gdy klient uzyskuje dostęp do słownika terminów z książki. Pobiera dostarczoną kotwicę nazwy (#tesla) i dostarcza klientowi ten termin oraz wyróżnia termin i jego opis na niebiesko, aby był łatwy do zobaczenia.
A. skonfiguruj swoje ciągi z id div, aby zakotwiczenie nazwy trafiło tam, gdzie powinno, a javascript może zmienić kolory tekstu
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. Używaj Javascript do wykonywania ciężkiej pracy, po stronie serwera, umieszczonego na stronie PHP lub gdziekolwiek.
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. Uruchamiam funkcję java automatycznie po załadowaniu strony.
<script>
$( document ).ready(function() {
D. pobrać kotwicę (#tesla) z adresu URL otrzymanego przez serwer
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. obciąć z niej znak krzyżyka
myhash1 = myhash1.substr(1) //myhash1 == tesla
F. Muszę podkreślić termin i opis, więc utworzę nową zmienną
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 link po stronie klienta (xyz.com # tesla) i przechodzi od razu do terminu. termin i opis są podświetlone na niebiesko przez JavaScript w celu szybkiego odczytania .. wszystkie inne wpisy pozostawione na czarno ..