Frage

Unter der Annahme einer URL:

www.example.com/?val=1#part2

PHP können die Anfrage Variablen lesen val1 die GET-Array verwendet wird.

Ist der Hash-Wert part2 auch lesbar? Oder ist dies nur bis zu dem Browser und JavaScript?

War es hilfreich?

Lösung

Das Hauptproblem ist, dass der Browser nicht einmal eine Anfrage mit einem Fragmente Teil senden. Das Fragment Teil wird direkt in dem Browser aufgelöst. So ist es erreichbar durch JavaScript.

Wie auch immer, können Sie eine URL in Bits, einschließlich der Fragment Teil analysieren, mit

Andere Tipps

Einfacher Test, den Zugriff auf http: // localhost: 8000 / hallo? foo = bar # this-is-not-gesendet-zu-Server

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -

Der Server empfängt die Anforderung ohne #appendage - alles nach dem Hash-Tag ist einfach ein Anker-Lookup auf dem Client

.

Sie können den Namen des Ankers innerhalb der URL über Javascript verwenden, als Beispiel finden:

<script>alert(window.location.hash);</script>

Die parse_url () Funktion in PHP kann funktionieren, wenn Sie bereits die benötigte URL-Zeichenfolge einschließlich des Fragments haben ( http: // Codepad .org / BDqjtXix ):

<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>

Output: fizzbuzz

Aber ich glaube nicht, PHP, um die Fragmentinformationen erhält, weil es nur Client.

Es ist abrufbaren von Javascript - wie window.location.hash. Von dort aus konnte man es an den Server mit Ajax zum Beispiel, oder kodieren sie senden und sie in URLs setzen, die dann durch auf der Server-Seite übergeben werden kann.

Der Hash wird nie an den Server gesendet, so dass keine.

Ja, es ist wahr, der Server nicht den Ankerteil bekommen. Allerdings gibt es eine Abhilfe, die Cookies. Sie können es hier finden: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

Die Antwort ist nein.

Der Hauptzweck des Hash ist zu einem gewissen Teil der Seite zu scrollen, wo Sie ein Lesezeichen definiert haben. z.B. Blättern Sie zu diesem Teil, wenn Seite geladen wird.

Die Browse so bewegen wird, dass diese Linie die ersten sichtbaren Inhalt auf der Seite ist, je nachdem, wie viel Inhalt folgt unterhalb der Linie.

Ja Javascript kann es acces, und dann ein einfacher Ajax-Aufruf wird die Magie tun

Ich denke, der Hash-Wert nur clientseitige verwendet wird, so können Sie es nicht mit PHP bekommen.

Sie könnte es mit Javascript umleiten obwohl PHP.

Ja, Sie können:

Mit dieser Methode um Fehler zu vermeiden:

<script> 
query=location.hash;
document.cookie= 'anchor'+query;
</script>

Und natürlich in PHP, dass die Welpen explodieren und einen der Werte erhalten

$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag

Was ist mit:

Dynamisch greifen die #hash

<script>
var urlhash = window.location.hash, //get the hash from url
    txthash = urlhash.replace("#", ""); //remove the #
    //alert(txthash);
</script>

<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>

Um es fließend:

Voll Beispiel mit nur Javascript und PHP

<script>
var urlhash = window.location.hash,  //get the hash from url
txthash = urlhash.replace("#", "");  //remove the #

function changehash(a,b){
   window.location.hash = b; //add hash to url
   //alert(b); //alert to test
   location.reload(); //reload page to show the current hash
}
</script>

<?php $hash = "<script>document.writeln(txthash);</script>";?>

<a onclick="changehash(this,'#hash1')">Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')">Change to #hash2</a> 

<?php echo "This is the current hash: " . $hash; ?> 
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>

Dies ist sollte funktionieren

Th Teil einer URI nach dem # wird "Fragment" genannt und ist per definitionem nur verfügbar / auf Client-Seite bearbeitet (siehe https://en.wikipedia.org/wiki/Fragment_identifier).

Auf der Client-Seite, diese javaScript mit window.location.hash mit zugegriffen werden kann.

Eine andere Lösung ist ein verstecktes Eingabefeld auf die PHP-Seite hinzuzufügen:

<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">

Verwenden Sie Javascript / jQuery Sie den Wert dieses Feldes auf der Seite zu laden oder die Reaktion auf ein Ereignis eingestellt werden kann:

$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));

In PHP auf der Server-Seite Sie diesen Wert lesen können, die $ _POST Sammlung mit:

$server_location_hash = $_POST['myHiddenLocationHash'];

Wir können es mit einem anderen Ansatz auch tun, wie alle zuerst den Hash-Wert von js erhalten und die Ajax-Aufruf, dass der Parameter mit und können tun, was wir wollen,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top