1

For a given url, I want to get the name-after-hash's age from the database. so for url like thepage.php#Madonna, you'll see "119!".

How can I extract the value after the hash in a url? (i need a safe all-browser-compatible-NON-JAVASCRIPT way). I want to do that like $_GET['after hash'].

The reason I'm not using GET is because I want to use AJAX and jquery's history plugin.

Basically what i want is to use ajax to retrieve data from the server according to the value assigned after the hash.

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
Gal
  • 23,122
  • 32
  • 97
  • 118
  • If NON-JAVASCRIPT, then answer is: It is not possible, browsers doesn't send anything what is after # that is behavior by design. –  Dec 16 '09 at 21:22
  • Ah, I see the misinterpretation, you mean after the #. In programming the word "Hash" has a special meaning, it doesn't refer to the # symbol. I'd call it the #, or the number symbol. – MindStalker Dec 16 '09 at 21:24
  • but I don't want JS to be a requirement for using my website. I want it to work, at least for the user's perspective, the same way when using JS and when not. – Gal Dec 16 '09 at 21:26
  • Change your URL scheme to be something like thepage.php/Madonna instead. That trailing part of the url is accessible by parsing $_SERVER["REQUEST_URI"] – Paul Dec 16 '09 at 21:29
  • @Paul, but then if the url is thepage.php/Madonna I wouldn't be able to use jquery's history plugin. Do you know any way I can manipulate a url with ajax? – Gal Dec 16 '09 at 21:36
  • (what i mean is that when a user hits "next" button, ajax will get another value from the db, the url will change to /Obama and display whatever). – Gal Dec 16 '09 at 21:37

3 Answers3

9

I don't think it's possible. The string after # is interpreted by the browser as an anchor name within the current page. It is not passed to the server.

Paul
  • 376
  • 1
  • 3
  • 2
    Definitely a good point -- the URL fragment of the current page isn't available to PHP. It's unclear if that's relevant to the OP's issue, however. The fragment *is* available to Javascript. – Frank Farmer Dec 16 '09 at 21:20
  • Exactly. This can even be used when forging URLs for XXS attacks when you don't want to be detected by server side security components, like IDS. – Wookai Dec 16 '09 at 21:20
6

Javascript

window.location.hash will give you this value. You can then pass it (via AJAX) to the server for results.

PHP

Check the Fragment of parse_url();

Return Values

On seriously malformed URLs, parse_url() may return FALSE and emit a E_WARNING. Otherwise an associative array is returned, whose components may be (at least one):

  • scheme - e.g. http
  • host
  • port
  • user
  • pass
  • path
  • query - after the question mark ?
  • fragment - after the hashmark #
Community
  • 1
  • 1
Sampson
  • 265,109
  • 74
  • 539
  • 565
  • 1
    IF browser would be so kind to send fragment to You, but it's tricky. –  Dec 16 '09 at 21:23
  • Do you know a php function with which I can extract the ENTIRE url to pass in parse_url($url)? – Gal Dec 16 '09 at 21:24
0

This question didn't make much sense, you need to clarify it.

You want to hash the URL without Javascript, but in a way that can be used by Ajax?

MindStalker
  • 14,629
  • 3
  • 26
  • 19
  • what?! absolutely not. I want to extract the value AFTER the # in the url. I don't need to clarify my question buddy, you need to clarify your reading. – Gal Dec 16 '09 at 21:18