shadowhunter: URL trennen

Hallo!

Ich möchte eine URL wie folgt mit php trennen können:

www.domain.com/index.php?test.php

Alles, was hinter dem ? ist in eine Variable speichern

z.B. eine Variable $search hat bei dem Beispiel den Wert "test.php"

In Javascript lautet dieser Befehl:
var search = location.search + location.hash;

Wie kann ich diesen Befehl php "tauglich" machen (möchte kein javascript mehr brauchen).

Bin dankbar für eure Hilfe.

Gruss

  1. hi shadowhunter,

    z.B. eine Variable $search hat bei dem Beispiel den Wert "test.php"

    <?php  
    $search = $_SERVER['QUERY_STRING'];  
    ?>
    

    — lg, gabriel

    1. Danke für dein Post.

      Funktioniert gut, aber habe noch ein kleines Problem:
      Wenn z.B. eine URL: www.domain.com/index.php?test.php#xxx ist, dann wird das #xxx mit dem php-befehl nicht in die variable gespeichert.
      Wie kann ich den hash (#xxx) noch an die variable dranmachen?

      Danke! gruss

      1. Hallo,

        Wenn z.B. eine URL: www.domain.com/index.php?test.php#xxx ist, dann wird das #xxx mit dem php-befehl nicht in die variable gespeichert.
        Wie kann ich den hash (#xxx) noch an die variable dranmachen?

        Ungetestet:

        <?php  
          $requested = $_SERVER['REQUEST_URI'];  
          $pos = strpos($requested, '#');  
          $fragment = substr($reqested, $pos);  
          echo $_SERVER['QUERY_STRING'] . $fragment;  
        ?>  
        
        

        — lg, gabriel

        1. Hi Willi,

          Ungetestet:

          <?php

          $requested = $_SERVER['REQUEST_URI'];
            $pos = strpos($requested, '#');
            $fragment = substr($reqested, $pos);
            echo $_SERVER['QUERY_STRING'] . $fragment;
          ?>

            
          Nein, habe es gerade noch mal mit Live HTTP Headers getestet:  
            
          Aufgerufene URL: http://www.example.org/foobar#blubb  
            
          GET /foobar HTTP/1.1  
          Host: www.example.org  
          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12  
          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,\*/\*;q=0.5  
          Accept-Language: de-de,de;q=0.7,en;q=0.3  
          Accept-Encoding: gzip,deflate  
          Accept-Charset: ISO-8859-1,utf-8;q=0.7,\*;q=0.7  
          Keep-Alive: 300  
          Connection: keep-alive  
            
          In den Request-Headern ist der von mir angesprochene Anker nirgendwo enthalten, folglich kannst du ihn auch nicht mit irgendwelchen Tricks serverseitig rekonstruieren ;-)  
            
            
          Viele Grüße,  
            ~ Dennis.
          
          -- 
          Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)
          
          1. Hi Dennis,

            In den Request-Headern ist der von mir angesprochene Anker nirgendwo enthalten, folglich kannst du ihn auch nicht mit irgendwelchen Tricks serverseitig rekonstruieren ;-)

            Okay … mist :D
            Aber stimmt, ist logisch. Hätte ich eigentlich auch wissen können :P
            Nunja, muss er es wohl irgendwie mit Javascript hinbekommen. (Wobei ich mich auch frage, was er denn mit dem Anker anfangen möchte …)

            — lg, gabriel

            1. Ich möchte damit das ganze Frameset nachladen:
              <frame src="<?php echo $search ?>" name="mainFrame">

              Geht der Anker überhaupt nicht mit php? Kann man dies sonst noch irgendwie lösen?
              Ich möchte dieses Sache nicht mit javascript lösen.
              Der Anker dient dazu, dass manachmal bei bestimmten Seiten direkt der Browser runterscrollt zu einem Thema.

              Danke euch! Gruss

              1. Ich möchte damit das ganze Frameset nachladen:
                <frame src="<?php echo $search ?>" name="mainFrame">

                Okay.

                Geht der Anker überhaupt nicht mit php?

                Nö. Biete es einfach als Feature für Leute an, die Javascript aktiviert haben. Die Usability wird ja nicht so sehr dadurch beeinflusst.

                Der Anker dient dazu, dass manachmal bei bestimmten Seiten direkt der Browser runterscrollt zu einem Thema.

                Schon klar ^^

                1. Hi Willi,

                  Ich möchte damit das ganze Frameset nachladen:
                  <frame src="<?php echo $search ?>" name="mainFrame">

                  Du willst also, dass deine Datei frameset.php oben genanntes Frameset nachlädt und dafür den als Query-String übergebenen Wert nimmt, z.B.

                  frameset.php?/pfad/zur/unterseite.html

                  soll eben <frame src="/pfad/zur/unterseite.html"> erwirken, ja?

                  Folgendes: Wenn du nun einen Anker z.B. #mein_anker an die URL anhängst, dann bezieht sich dieser Anker ja auf frameset.php, der Browser such den Anker also darin und der Anker kommt (wie bereits erläutert) nicht erst auf dem Server an.

                  Du musst den Anker also kodieren, d.h. nich # sondern %23 schreiben. Sorge dafür (indem du den Link zum Frameset nachladen anpasst), dass der Benutzer folgende URL aufruft:

                  frameset.php?/pfad/zur/unterseite.html%23mein_anker

                  Wenn ich mich nicht irre, solltest du in $_SERVER['QUERY_STRING'] dann /pfad/zur/unterseite.html#mein_anker stehen haben, was du nur noch ausgeben musst. Hierbei bitte htmlspecialchars() verwenden, um XSS Attacken vorzubeugen!!

                  <frame src="<?php echo htmlspecialchars($_SERVER['QUERY_STRING']); ?>">

                  So sollte es eigentlich klappen.

                  Geht der Anker überhaupt nicht mit php?
                  Nö. Biete es einfach als Feature für Leute an, die Javascript aktiviert haben. Die Usability wird ja nicht so sehr dadurch beeinflusst.

                  Wie jetzt? Die Usability wird eigentlich durch die Verwendung von Frames und irgendwelchen Frame-Nachlade-Mechanismen grundsätzlich sehr stark eingeschränkt.

                  Viele Grüße,
                    ~ Dennis.

                  1. Hallo!

                    soll eben <frame src="/pfad/zur/unterseite.html"> erwirken, ja?

                    Ja genau!

                    Folgendes: Wenn du nun einen Anker z.B. #mein_anker an die URL anhängst, dann bezieht sich dieser Anker ja auf frameset.php, der Browser such den Anker

                    Im Frameset wird der Anker nicht eingetragen unter <frame src="/pfad/zur/unterseite.html">.
                    Er wird gar nicht drangehängt bei dem Php-Befehl $_SERVER['QUERY_STRING']. Sonst würde dies doch gehe...

                    frameset.php?/pfad/zur/unterseite.html%23mein_anker

                    Das geht nicht!

                    <frame src="<?php echo htmlspecialchars($_SERVER['QUERY_STRING']); ?>">

                    Danke, ich dachte nicht daran

                    Danke & Gruss

                    1. Hi shadowhunter,

                      Folgendes: Wenn du nun einen Anker z.B. #mein_anker an die URL anhängst, dann bezieht sich dieser Anker ja auf frameset.php, der Browser such den Anker
                      Im Frameset wird der Anker nicht eingetragen unter <frame src="/pfad/zur/unterseite.html">.
                      Er wird gar nicht drangehängt bei dem Php-Befehl $_SERVER['QUERY_STRING']. Sonst würde dies doch gehe...

                      Deiner Aussage "Das geht nicht" glaube ich nicht, ich hab es grade selber mal probiert, es geht ;-)

                      url-encoding.php [Quellcode]

                      Die angehängte URL muss kodiert sein, also z.B. so:

                      url-encoding.php?http%3A%2F%2Fde.selfhtml.org%2Fnavigation%2Fhtml.htm%23tabellen

                      Nur das # zu kodieren geht im Prinzip auch, solange du in der URL sonst keine Sonderzeichen hast:

                      url-encoding.php?http://de.selfhtml.org/navigation/html.htm%23tabellen

                      Viele Grüße,
                        ~ Dennis.

                  2. Hi Dennis,

                    Die Usability wird eigentlich durch die Verwendung von Frames und irgendwelchen Frame-Nachlade-Mechanismen grundsätzlich sehr stark eingeschränkt.

                    Na klar. Aber das nicht Vorhandensein von Ankern ist in den meisten Fällen für Leute mit ausgeschaltetem JS verkraftbar. Gibt ja meistens oben noch ein Inhaltsverzeichnis o.Ä.

                    — lg, gabriel

      2. Hi shadowhunter,

        Wie kann ich den hash (#xxx) noch an die variable dranmachen?

        Gar nicht. Dieser so genannten Anker ist lediglich für den Browser gedacht, um an bestimmte Stellen im Dokument springen zu können und wird vom Browser nicht an den Server übermittelt.

        Was hast du denn vor?

        Viele Grüße,
          ~ Dennis.

  2. Hallo,

    In Javascript lautet dieser Befehl:
    var search = location.search + location.hash;

    Du suchst nach $_SERVER["QUERY_STRING"]

    Jeena