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
php
url
anchor
url-fragment
ilija veselica
quelle
quelle
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.
quelle
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:
quelle
$fragment = parse_url("http://example.com/site/gallery/1#photo45", PHP_URL_FRAGMENT);
A) hast du schon eine URL mit #hash in PHP? Einfach! Analysieren Sie es einfach aus!
Oder in "altem" PHP müssen Sie das explodierte vorab speichern, um auf das Array zugreifen zu können:
B) Sie möchten einen #hash erhalten, indem Sie ein Formular an PHP senden?
=> Benutze etwas JavaScript MAGIC! (Um das Formular vorzuverarbeiten)
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 daswindow.location.hash
in JavaScript verwendet haben, das einfach so funktioniert :))C) Sie möchten die #hash in PHP erhalten GERADE von angeforderten URL?
SIE KÖNNEN NICHT!
... (nicht unter Berücksichtigung regulärer HTTP-Anfragen) ...
... Hoffe das hat geholfen :)
quelle
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 ...
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.
quelle
Sie können den Text nach dem Rautezeichen nicht erhalten . Es wird in einer Anfrage nicht an den Server gesendet.
quelle
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 PHPquelle
Sie können es durch eine Kombination von Javascript und PHP tun:
Und von der anderen Seite;
Beim Senden des Formulars können Sie den Wert dann über $ _POST ['Hash'] abrufen (Formular festlegen).
quelle
Wenn Sie den Hash dynamisch von der URL abrufen möchten, sollte dies funktionieren: https://stackoverflow.com/a/57368072/2062851
quelle
Sie müssen zuerst die URL analysieren, damit es so aussieht:
Wenn Sie die tatsächliche URL des aktuellen Browsers analysieren müssen, müssen Sie den Server anrufen.
quelle
$_SERVER['REQUEST_URI']
ist nicht enthalten die #fragmentDas 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
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.
C. Ich starte die Java-Funktion automatisch, wenn die Seite geladen wird.
D. Holen Sie sich den Anker (#tesla) von der vom Server empfangenen URL
E. Schneiden Sie das Hash-Zeichen ab
F. Ich muss den Begriff und die Beschreibung hervorheben, damit ich eine neue Variable erstelle
G. Jetzt kann ich die Textfarbe für den Begriff und die Beschreibung ändern
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.
quelle