Come posso selezionare il frammento dopo il simbolo "#" nel mio URL utilizzando PHP?
Il risultato che voglio è "photo45".
Questo è un URL di esempio:
http://example.com/site/gallery/1#photo45
Come posso selezionare il frammento dopo il simbolo "#" nel mio URL utilizzando PHP?
Il risultato che voglio è "photo45".
Questo è un URL di esempio:
http://example.com/site/gallery/1#photo45
Risposte:
Se vuoi ottenere il valore dopo il segno cancelletto o l'ancora come mostrato nel browser di un utente: Questo nonèpossibile con HTTP "standard" poiché questo valore non viene mai inviato al server (quindi non sarà disponibile in $_SERVER["REQUEST_URI"]
o simili variabili predefinite). Avresti bisogno di una sorta di magia JavaScript sul lato client, ad esempio per includere questo valore come parametro POST.
Se si tratta solo di analizzare un URL noto da qualsiasi fonte, la risposta di mck89 va benissimo.
alert(window.location.hash);
window.location.hash
ti #
dà l'intero frammento COMPRESO il segno [cancelletto] ... ed è, ovviamente, in 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); });
... a seconda del "metodo" del tuo modulo ottieni l'hash con $_POST['fragment']
o $_GET['fragment']
... MAGIC!
Quella parte si chiama "frammento" e puoi ottenerla in questo modo:
$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
Oppure nel "vecchio" PHP è necessario pre-memorizzare l'esploso per accedere all'array:
$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
});
A seconda delle form
's method
attribuire si ottiene questo hash in PHP da:
$_GET['fragment']
o$_POST['fragment']
Possibili ritorni: 1. ""
[stringa vuota] (senza hash) 2. hash intero INCLUSO il #
segno [hash] (perché abbiamo usato window.location.hash
in JavaScript che funziona in questo modo :))
... (non considerando le normali richieste HTTP) ...
... Spero che questo abbia aiutato :)
Ho cercato una soluzione per questo per un po 'e l'unica cosa che ho trovato è usare le riscritture degli URL per leggere "l'ancora". Ho trovato nella documentazione di Apache qui http://httpd.apache.org/docs/2.2/rewrite/advanced.html quanto segue ...
Per impostazione predefinita, il reindirizzamento a un ancoraggio HTML non funziona, perché mod_rewrite sfugge al carattere #, trasformandolo in% 23. Questo, a sua volta, interrompe il reindirizzamento.
Soluzione: utilizzare il flag [NE] sulla RewriteRule. NE sta per No Escape.
Discussione: Questa tecnica funzionerà ovviamente anche con altri caratteri speciali che mod_rewrite, per impostazione predefinita, codifica URL.
Potrebbe avere altri avvertimenti e cosa no ... ma penso che almeno fare qualcosa con il # sul server sia possibile.
Non puoi ottenere il testo dopo il segno cancelletto . Non viene inviato al server in una richiesta.
Ho trovato questo trucco se insisti a volere il valore con PHP. dividere il #
valore anchor ( ) e ottenerlo con JavaScript, quindi memorizzare come cookie, dopodiché ottenere il valore del cookie con PHP
Puoi farlo con una combinazione di javascript e php:
<div id="cont"></div>
E dall'altra parte;
<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>
Quindi, durante l'invio del modulo puoi recuperare il valore tramite $ _POST ['hash'] (imposta il modulo)
Se desideri acquisire in modo dinamico l'hash dall'URL, dovrebbe funzionare: 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;
?>
Devi prima analizzare l'URL, quindi funziona così:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Se è necessario analizzare l'URL effettivo del browser corrente, è necessario richiedere di chiamare il server.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
non non include il #fragment
Ottenere i dati dopo il segno di spunta in una stringa di query è semplice. Ecco un esempio utilizzato per quando un cliente accede a un glossario di termini da un libro. Prende il nome ancora consegnato (#tesla) e consegna al client quel termine ed evidenzia il termine e la sua descrizione in blu in modo che sia facile da vedere.
A. imposta le tue stringhe con un div id, così il nome anchor va dove dovrebbe e il javascript può cambiare i colori del testo
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. Usa Javascript per fare il lavoro pesante, sul lato server, inserito nella tua pagina PHP, o ovunque ..
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. Sto avviando automaticamente la funzione java quando la pagina viene caricata.
<script>
$( document ).ready(function() {
D. ottenere l'ancora (#tesla) dall'url ricevuto dal server
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. elimina il segno di cancelletto
myhash1 = myhash1.substr(1) //myhash1 == tesla
F. Devo evidenziare il termine e la descrizione così creo una nuova var
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G. Ora posso manipolare il colore del testo per il termine e la descrizione
var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>
H. Funziona. il cliente fa clic sul collegamento sul lato client (xyz.com # tesla) e va direttamente al termine. il termine e la descrizione sono evidenziati in blu da javascript per una rapida lettura .. tutte le altre voci lasciate in nero ..