2012-02-27 6 views
4

Я попытался так много комбинации, чтобы получить правильный путь моей страницы как яваскрипт кодаЭквивалента побега (window.location.href) в PHP

escape(window.location.href) 

Я попытался это:

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]"; 

но он возвращает что-то вроде:

http://www.mydomain.com/node/4158?asdf=1asdf=1 

когда фактическая страница:

http://www.mydomain.com/node/4158?asdf=1 

, и если у меня есть этот URL: http://www.mydomain.com/node/4158#comments, например, результат:

http://www.mydomain.com/node/4158 

т.е. без ""

# комментарий
+4

Часть '#' не будет передаваться на сервер. Это «хэш-фрагмент», который браузер использует для перехода к определенному якорю. –

+0

Не используйте 'escape', он сломан и устарел. Используйте 'encodeURIComponent'. – Quentin

+0

, даже если я использую encodeURIComponent, я все равно получаю #comments как часть сохраненного URL-адреса. – jaypabs

ответ

3

Идентификатор фрагмента # является обрабатывается полностью на стороне клиента. Браузер не отправит его на сервер, поэтому PHP не сможет получить к нему доступ.

Единственный способ узнать, что это такое, - включить JavaScript на страницу, которая делает HTTP-запрос, включая полный URI.

+0

Это большая проблема для меня сейчас, потому что после того, как я использую этот код "escape (window .location.href) «он сохраняет значение в таблице, и я использую php, чтобы различать URL-адрес на текущей странице и сохранить URL-адрес на таблице. если это невозможно сделать в PHP, есть ли способ сохранить только URL-адрес, используя javascript без комментирования или? asdf = 1? – jaypabs

0

попробовать

$url = $_SERVER['REQUEST_URI']; 
+0

Это не даст фрагмент '#' либо –

+0

, как я объяснил в своем вопросе, он не включает? Asdf = 1 или #comments – jaypabs

0

$_SERVER['QUERY_STRING'] - подстрока $_SERVER['REQUEST_URI'] - вам просто нужен последний. Но вместо того, чтобы самостоятельно создавать URL-адрес, просто используйте $_SERVER['SCRIPT_URI'].

Кроме того, поскольку ваше приложение является серверным, а идентификатор фрагмента (все от #) не включается в HTTP-запросы, в PHP-коде отсутствует доступ к нему.

0
$location = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $location .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; 
} else { 
    $location .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
} 
echo $location; 
0

Много людей говорят, что фрагмент является стороне клиента здесь, но в соответствии с Документами parse_url возвращает фрагмент, если присутствует (см первый пример в ссылке).

+0

Просто выполните поиск справки об этом и заметите, что это не помогает, потому что 'parse_url' должен сначала иметь строку, чтобы захватить URL-адрес. Итак, откуда взялась эта строка? Не от 'parse_url'! Таким образом, уверен, что это работает, когда у вас есть строка с '#' в ней. Но вам нужно сначала получить строку и AFAIK, вы не можете получить весь URL-адрес с # в нем как строку на PHP, было бы неплохо! –

Смежные вопросы