Frage Erhalte Fragment (Wert nach Hash '#') von einer URL in PHP


Wie kann ich das Fragment (Wert nach Hash '#') von einer URL in PHP bekommen?

Sag von http://domain.com/site/gallery/1#photo45 Ich will photo45


76
2018-02-23 11:03


Ursprung


Antworten:


Wenn Sie den Wert nach dem Hash-Zeichen oder Anker wie im Browser eines Benutzers angezeigt bekommen möchten: Dies ist nicht möglich mit "Standard" HTTP, da dieser Wert nie an den Server gesendet wird (daher wird es nicht in verfügbar sein $_SERVER["REQUEST_URI"] oder ähnliche vordefinierte Variablen). Sie würden eine Art JavaScript-Magie auf der Client-Seite benötigen, z.B. um diesen Wert als einen POST-Parameter einzuschließen.

Wenn es nur darum geht, eine bekannte URL aus einer beliebigen Quelle zu analysieren, wird die Antwort von mck89 ist aber vollkommen in Ordnung.


97
2018-02-23 11:05



Dieser Teil wird "Fragment" genannt und du kannst es auf diese Weise erhalten:

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

36
2018-02-23 11:05



A) hast du schon eine URL mit #hash in PHP? Einfach! Analysiere es einfach!

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 die Explosion vorab speichern, um auf das Array zuzugreifen:

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

B) Sie möchten #hash erhalten, indem Sie ein Formular an PHP senden?
=> Nutzen Sie JavaScript MAGIC! (Um das Formular vorzuverarbeiten)

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
});

Beruht auf deiner formist es method Attribut erhalten Sie diesen Hash in PHP von:
  $_GET['fragment'] oder $_POST['fragment']

Mögliche Retouren: 1. ""[leerer String] (kein Hash) 2. gesamter Hash INKLUSIVE des #[hash] sign (weil wir die window.location.hash in JavaScript, das einfach so funktioniert :))

C) Sie möchten #hash in PHP bekommen GERADE von der angeforderten URL?

Du kannst es nicht!

... (nicht bei regelmäßigen HTTP-Anfragen) ...

... hoffe das hat geholfen :)


24
2017-12-09 01:48



Ich habe ein wenig nach einem Workaround gesucht - und das einzige, was ich gefunden habe, ist URL-Rewrites zu verwenden, um den "Anker" zu lesen. Ich habe in den Apache Docs hier gefunden http://httpd.apache.org/docs/2.2/rewrite/advanced.html folgende...

Standardmäßig funktioniert das Umleiten zu einem HTML-Anker nicht, da mod_rewrite das Zeichen # entzieht und es in% 23 umwandelt.   Dies wiederum unterbricht die Umleitung.

Lösung: Verwenden Sie das Flag [NE] auf der RewriteRule. NE steht für Nein   Flucht.

Diskussion: Diese Technik wird natürlich auch mit anderen Specials funktionieren   Zeichen, die mod_rewrite standardmäßig URL-encodiert.

Es kann andere Vorbehalte haben und was nicht ... aber ich denke, dass zumindest etwas mit dem # auf dem Server möglich ist.


8
2017-11-21 19:48



Sie können den Text nicht nach der Rautezeichen. Es wird in einer Anfrage nicht an den Server gesendet.


3
2018-02-23 11:05



Ich habe diesen Trick gefunden, wenn Sie darauf bestehen, den Wert mit PHP zu wollen. Teilen Sie den Anker (#) -Wert und erhalten Sie ihn mit Javascript, dann speichern Sie als Cookie, danach erhalten Sie den Cookie-Wert mit PHP ~

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


3
2017-12-14 03:31



Sie könnten einen String ersetzen auf der Client-Seite dann die Server-Seite. Keine besonders robuste Lösung, aber wenn Sie eine schnelle Lösung wie ich wollen, wird es ausreichen, denke ich.

Klient:

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

Server:

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

0
2017-12-13 22:51



Das Abrufen der Daten nach dem Hash-Zeichen in einer Abfragezeichenfolge ist einfach. Hier ist ein Beispiel, wenn ein Kunde auf ein Glossar von Begriffen aus einem Buch zugreift. Es nimmt den Namen Anker geliefert (#tesla), und liefert den Client zu diesem Begriff und hebt den Begriff und seine Beschreibung in blau, so dass es leicht zu sehen ist.

A. Richten Sie Ihre Zeichenfolgen mit einer div-ID ein, so dass der Name anchor an die Stelle kommt, an der er verwendet werden 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 oder wo auch immer eingefügt wird.

<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 den Anker (#tesla) von der URL, die vom Server empfangen wird

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

E. trimm das Hash-Zeichen davon ab

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

F. Ich muss den Begriff und die Beschreibung hervorheben, also erstelle ich eine neue Var

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

G. Jetzt kann ich die Textfarbe für den Ausdruck und die Beschreibung manipulieren

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

H. Das funktioniert. Client klickt Link auf Clientseite (xyz.com # tesla) und geht direkt auf den Begriff. Der Begriff und die Beschreibung werden durch Javascript zum schnellen Lesen blau hervorgehoben. Alle anderen Einträge bleiben in schwarz.


-3
2018-02-05 02:13