Могу ли я прочитать хэш-часть URL-адреса в моем серверном приложении (PHP, Ruby, Python и т. Д.)? - PullRequest
209 голосов
/ 02 июня 2009

Принимая URL-адрес:

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

PHP может читать переменные запроса val1, используя массив GET.

Читается ли хэш-значение part2? Или это только до браузера и JavaScript?

Ответы [ 12 ]

194 голосов
/ 02 июня 2009

Основная проблема в том, что браузер даже не отправит запрос с фрагментной частью. Часть фрагмента разрешается прямо в браузере. Так что это доступно через JavaScript.

В любом случае, вы можете разбирать URL-адрес на биты, включая фрагментную часть, используя parse_url () , но это, очевидно, не ваш случай.

96 голосов
/ 02 июня 2009

Простой тест, доступ к http://localhost:8000/hello?foo=bar#this-is-not-sent-to-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 -

Сервер получает запрос без #appendage - все, что после хеш-тега, является просто поиском привязки на клиенте.

Вы можете найти имя привязки, используемое в URL, через javascript, используя, например,

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

Функция parse_url () в PHP может работать, если у вас уже есть необходимая строка URL, включая фрагмент (http://codepad.org/BDqjtXix):

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

Output: fizzbuzz

Но я не думаю, что PHP получает информацию о фрагментах, потому что это только для клиента.

48 голосов
/ 02 июня 2009

Его можно получить из Javascript - как window.location.hash. Оттуда вы можете отправить его на сервер, например, с помощью Ajax, или закодировать его и поместить в URL-адреса, которые затем можно будет передать на серверную сторону.

25 голосов
/ 02 июня 2009

Хеш никогда не отправляется на сервер, поэтому нет.

8 голосов
/ 19 октября 2011

Да, это правда, сервер не получает якорную часть. Однако есть обходной путь с использованием куки. Вы можете найти его здесь: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

7 голосов
/ 29 июня 2011

Ответ - нет.

Основная цель хэша - прокрутить до определенной части страницы, где вы определили закладку. например Прокрутите до этой части при загрузке страницы.

Обзор будет прокручиваться так, что эта строка будет первым видимым контентом на странице, в зависимости от того, сколько контента следует за линией.

Да, javascript может получить к нему доступ, и тогда простой вызов ajax сотворит магию

3 голосов
/ 02 июня 2009

Я думаю, что хеш-значение используется только на стороне клиента, поэтому вы не можете получить его с помощью php.

вы можете перенаправить его с помощью JavaScript на php.

2 голосов
/ 07 марта 2017

Да, вы можете:

Используйте этот метод для предотвращения ошибок:

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

И, конечно же, в PHP взорвите этого щенка и получите одно из значений

$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
1 голос
/ 27 декабря 2016

Th часть URI после # называется фрагментом и по определению доступна / обрабатывается только на стороне клиента (см. https://en.wikipedia.org/wiki/Fragment_identifier).

На стороне клиента к этому можно обратиться, используя javaScript с window.location.hash.

1 голос
/ 17 июля 2014
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>

Это должно работать

...