Как получить полный URL-адрес в адресной строке с помощью PHP

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

У меня есть свой URL-адрес, например, www.domain.com/#!/username (как и в твиттере).

Как получить полный URL (вся строка выше), включая подстроку после '#!' в адресе, используя PHP или Javascript ??

В JavaScript, если у вас нет чего-то еще, вы должны иметь возможность получить полный URL-адрес из document.location (например, var URLstring = document.location; ).

В PHP, как отмечали другие, это невозможно из-за того, как работает хэш (он перемещается внутри страницы и не вызывает перезагрузку страницы, поэтому сервер никогда не знает об этом, если JS не вызывает функцию Ajax, которая запускает скрипт на сервере).

Хэш-часть URL-адреса (# и все после) не отправляется браузером на сервер, поэтому он недоступен для PHP.

Если вам абсолютно нужна ваша серверная сторона, чтобы знать об этом, единственный способ – загрузить промежуточную страницу, содержащую Javascript, которая считывает хеш-значение, и делает другой запрос, где значение содержится в обычном HTTP-параметре. Например, промежуточная страница может выглядеть примерно так:

 <html> <!-- snip.. --> <body> <script type="text/javascript"> $(document).ready(function() { $.get('realContent.php?hash=' + location.hash, function(data) { $('#content').html(data); } ); } </script> <div id="content"></div> </body> </html> 

Часть после хеша (#) никогда не отправляется на сервер, поэтому вы никогда не получите «полный» URL-адрес обратно на PHP. Часть после # используется только на стороне клиента и может быть отправлена ​​только с сервера клиенту.

Ответ Sled – лучшее, что вы можете сделать, однако нет способа получить текст после знака фунта «#». Все, что указано после «#», считается якорем и не отправляется на сервер. «#» Интерпретируется только браузером. Вы можете попробовать некоторые хитрости Javascript здесь, но я рекомендую избегать передачи данных после «#».

Я использовал эту функцию для этого (PHP 5.2) ::

 function getInstance($uri = 'SERVER') { if ($uri == 'SERVER') { if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) { $https = 's://'; } else { $https = '://'; } if (!empty ($_SERVER['PHP_SELF']) && !empty ($_SERVER['REQUEST_URI'])) { $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; if (strlen($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], $_SERVER['QUERY_STRING']) === false) { $theURI .= '?'.$_SERVER['QUERY_STRING']; } } else { $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']; if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { $theURI .= '?' . $_SERVER['QUERY_STRING']; } } $theURI = urldecode($theURI); $theURI = str_replace('"', '&quot;',$theURI); $theURI = str_replace('<', '&lt;',$theURI); $theURI = str_replace('>', '&gt;',$theURI); $theURI = preg_replace('/eval\((.*)\)/', '', $theURI); $theURI = preg_replace('/[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']/', '""', $theURI); } echo (string)$theURI; }