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

Предполагая URL-адрес:

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

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

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

206

Решение

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

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

192

Другие решения

Простой тест, доступ к HTTP: // локальный: 8000 / привет Foo = бар # это-это-не выслали-сервер

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

95

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

48

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

25

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

8

Ответ — нет.

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

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

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

7

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

Вы можете перенаправить его с помощью JavaScript к PHP, хотя.

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

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

1
По вопросам рекламы [email protected]