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


предполагая URL:

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

PHP может читать переменные запроса val1 С помощью массива GET.

- это хэш-значение part2 также читабельным? Или это только до браузера и JavaScript?

12 205

12 ответов:

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

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

простой тест, доступа 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 -

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

вы можете найти имя якоря, используемое в 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 получает информацию о фрагменте, потому что это только клиент.

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

хэш никогда не отправляется на сервер, так что нет.

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

ответа нет.

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

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

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

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

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

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

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

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

на стороне клиента, это можно получить с помощью javaScript с window.location.hash.

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

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

<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

мы можем сделать это и с другим подходом, например, сначала получить хэш-значение из js и вызвать ajax, используя этот параметр, и можем делать все, что захотим

другое решение-добавить скрытое поле ввода на страницу PHP:

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

С помощью javascript/jQuery вы можете установить значение этого поля на странице загрузки или ответа на событие:

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

в php на стороне сервера вы можете прочитать это значение, используя коллекцию $_POST:

$server_location_hash = $_POST['myHiddenLocationHash'];