Wie kann ich mit PHP das Fragment nach dem Symbol '#' in meiner URL auswählen?
Das Ergebnis, das ich will, ist "photo45".
Dies ist eine Beispiel-URL:
http://example.com/site/gallery/1#photo45
Wie kann ich mit PHP das Fragment nach dem Symbol '#' in meiner URL auswählen?
Das Ergebnis, das ich will, ist "photo45".
Dies ist eine Beispiel-URL:
http://example.com/site/gallery/1#photo45
Antworten:
Wenn Sie den Wert nach der Hash-Markierung oder dem Anker erhalten möchten, wie im Browser eines Benutzers angezeigt: Dies ist mit "Standard" -HTTP nicht möglich, da dieser Wert niemals an den Server gesendet wird (daher ist er in $_SERVER["REQUEST_URI"]
oder ähnlich nicht verfügbar vordefinierte Variablen). Auf der Clientseite benötigen Sie eine Art JavaScript-Magie, z. B. um diesen Wert als POST-Parameter einzuschließen.
Wenn es nur darum geht, eine bekannte URL aus einer beliebigen Quelle zu analysieren, ist die Antwort von mck89 jedoch vollkommen in Ordnung.
alert(window.location.hash);
window.location.hash
Sie erhalten das gesamte Fragment einschließlich des #
[Hash] -Zeichens ... und es ist natürlich 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); });
... abhängig von der "Methode" Ihres Formulars erhalten Sie den Hash von $_POST['fragment']
oder $_GET['fragment']
... MAGIE!
Dieser Teil heißt "Fragment" und Sie können ihn auf folgende Weise erhalten:
$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
Oder in "altem" PHP müssen Sie das explodierte vorab speichern, um auf das Array zugreifen zu können:
$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
});
Je nach Ihrem form
‚s - method
Attribute erhalten Sie diesen Hash in PHP von:
$_GET['fragment']
oder$_POST['fragment']
Mögliche Rückgaben: 1. ""
[leere Zeichenfolge] (kein Hash) 2. ganzer Hash EINSCHLIESSLICH des #
Zeichens [Hash] (weil wir das window.location.hash
in JavaScript verwendet haben, das einfach so funktioniert :))
... (nicht unter Berücksichtigung regulärer HTTP-Anfragen) ...
... Hoffe das hat geholfen :)
Ich habe ein bisschen nach einer Problemumgehung dafür gesucht - und das einzige, was ich gefunden habe, ist, URL-Umschreibungen zu verwenden, um den "Anker" zu lesen. Ich fand in den Apache-Dokumenten hier http://httpd.apache.org/docs/2.2/rewrite/advanced.html Folgendes ...
Standardmäßig funktioniert die Umleitung zu einem HTML-Anker nicht, da mod_rewrite dem Zeichen # entgeht und es in% 23 umwandelt. Dies unterbricht wiederum die Umleitung.
Lösung: Verwenden Sie das Flag [NE] in der RewriteRule. NE steht für No Escape.
Diskussion: Diese Technik funktioniert natürlich auch mit anderen Sonderzeichen, die mod_rewrite standardmäßig URL-codiert.
Es kann andere Einschränkungen haben und was nicht ... aber ich denke, dass es möglich ist, zumindest etwas mit dem # auf dem Server zu tun.
Sie können den Text nach dem Rautezeichen nicht erhalten . Es wird in einer Anfrage nicht an den Server gesendet.
Ich habe diesen Trick gefunden, wenn Sie darauf bestehen, den Wert mit PHP zu wollen. Teilen Sie den anchor ( #
) -Wert und rufen Sie ihn mit JavaScript ab. Speichern Sie ihn dann als Cookie. Anschließend erhalten Sie den Cookie-Wert mit PHP
Sie können es durch eine Kombination von Javascript und PHP tun:
<div id="cont"></div>
Und von der anderen Seite;
<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>
Beim Senden des Formulars können Sie den Wert dann über $ _POST ['Hash'] abrufen (Formular festlegen).
Wenn Sie den Hash dynamisch von der URL abrufen möchten, sollte dies funktionieren: 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;
?>
Sie müssen zuerst die URL analysieren, damit es so aussieht:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Wenn Sie die tatsächliche URL des aktuellen Browsers analysieren müssen, müssen Sie den Server anrufen.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
ist nicht enthalten die #fragment
Das Abrufen der Daten nach dem Hashmark in einer Abfragezeichenfolge ist einfach. Hier ist ein Beispiel, das verwendet wird, wenn ein Kunde auf ein Glossar mit Begriffen aus einem Buch zugreift. Es nimmt den gelieferten Namensanker (#tesla) und liefert den Client an diesen Begriff und hebt den Begriff und seine Beschreibung in Blau hervor, damit er leicht zu sehen ist.
A. Richten Sie Ihre Zeichenfolgen mit einer Div-ID ein, damit der Namensanker dorthin geht, wo er soll, und das Javascript die Textfarben ändern kann
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. Verwenden Sie Javascript, um die schwere Arbeit auf der Serverseite zu erledigen, die in Ihre PHP-Seite eingefügt wurde, oder wo auch immer.
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. Ich starte die Java-Funktion automatisch, wenn die Seite geladen wird.
<script>
$( document ).ready(function() {
D. Holen Sie sich den Anker (#tesla) von der vom Server empfangenen URL
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. Schneiden Sie das Hash-Zeichen ab
myhash1 = myhash1.substr(1) //myhash1 == tesla
F. Ich muss den Begriff und die Beschreibung hervorheben, damit ich eine neue Variable erstelle
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G. Jetzt kann ich die Textfarbe für den Begriff und die Beschreibung ändern
var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>
H. Das funktioniert. Der Client klickt auf den Link auf der Clientseite (xyz.com # tesla) und geht direkt zum Begriff. Der Begriff und die Beschreibung werden zum schnellen Lesen durch Javascript blau hervorgehoben. Alle anderen Einträge bleiben schwarz.