Получить фрагмент (значение после hash '#') из URL-адреса в php

Как я могу получить фрагмент (значение после hash '#') из URL-адреса в php?

Скажем, от http://domain.com/site/gallery/1#photo45 Я хочу photo45

Если вы хотите получить значение после хэш-метки или привязки, как показано в браузере пользователя: это невозможно при использовании «стандартного» HTTP, поскольку это значение никогда не отправляется на сервер (следовательно, оно не будет доступно в $_SERVER["REQUEST_URI"] или аналогичные предопределенные переменные). Вам понадобится какая-то магия JavaScript на стороне клиента, например, чтобы включить это значение в качестве параметра POST.

Если речь идет только о разборе известного URL-адреса из любого источника, ответ mck89 отлично работает.

Эта часть называется «фрагмент», и вы можете получить ее так:

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

A) уже есть url с #hash в PHP? Легко! Просто разобрать!

 if( strpos( $url, "#" ) === false ) echo "NO HASH !"; else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0 

Или в «старом» PHP вы должны предварительно сохранить взорван для доступа к массиву:

 $exploded_url = explode( "#", $url ); $exploded_url[1]; 

B) Вы хотите получить #hash, отправив форму на PHP?
=> Использовать JavaScript MAGIC! (Чтобы предварительно обработать форму)

 var forms = document.getElementsByTagName('form'); //get all forms on the site for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit', //to each form... function(){ //add a submit pre-processing function that will: var hidden = document.createElement("input"); //create an extra input element hidden.setAttribute('type','hidden'); //set it to hidden so it doesn't break view hidden.setAttribute('name','fragment'); //set a name to get by it in PHP hidden.setAttribute('value',window.location.hash); //set a value of #HASH this.appendChild(hidden); //append it to the current form }); 

В зависимости от атрибута method вы получаете этот хэш в PHP:
$_GET['fragment'] или $_POST['fragment']

Возможные возвращения: 1. "" [пустая строка] (без хэша) 2. весь хэш ВКЛЮЧАЕТ знак # [hash] (потому что мы использовали window.location.hash в JavaScript, который работает именно так :))

C) Вы хотите получить #hash в PHP JUST из запрошенного URL-адреса?

ВЫ НЕ МОЖЕТЕ!

… (не учитывая регулярные HTTP-запросы) …

… Надеюсь, это помогло 🙂

Я искал обходной путь для этого немного, и единственное, что я нашел, – это использовать перезаписи URL для чтения «якоря». Я нашел в apache docs здесь http://httpd.apache.org/docs/2.2/rewrite/advanced.html следующее …

По умолчанию перенаправление на якорь HTML не работает, потому что mod_rewrite избегает символа #, превращая его в% 23. Это, в свою очередь, нарушает перенаправление.

Решение. Используйте флаг [NE] в RewriteRule. NE означает No Escape.

Обсуждение. Этот метод, конечно же, будет работать и с другими специальными символами, которые mod_rewrite, по умолчанию, кодирует URL.

У него могут быть другие оговорки, а что нет … но я думаю, что возможно хотя бы что-то с # на сервере.

Вы не можете получить текст после метки хэша . Он не отправляется на сервер в запросе.

Я нашел этот трюк, если вы настаиваете на желании получить значение с помощью php .. разделите значение anchor (#) и получите его с javascript, а затем сохраните как cookie, после чего получите значение cookie с помощью php ~

http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

Вы можете заменить строку на стороне клиента, а затем на стороне сервера. Не особенно надежное решение, но если вы не найдете такого быстрого решения, как я, я думаю.

Клиент:

 var tempString = stringVal.replace('#', 'hashtag'); 

Сервер:

 $user_message = $_GET['userMessage']; $user_message = str_replace("hashtag", "#", $user_message); 

Получение данных после хэшмарка в строке запроса прост. Вот пример, используемый для того, когда клиент обращается к глоссарию терминов из книги. Он берет имя якоря, доставленного (#tesla), и доставляет клиенту на этот срок и выделяет термин и его описание в синем, поэтому его легко увидеть.

A. настройте свои строки с помощью id div, поэтому якорь имен отправляется туда, где его предполагается, и javascript может изменять цвета текста

 <div id="tesla">Tesla</div> <div id="tesla1">An energy company</div> 

B. Используйте Javascript для выполнения тяжелой работы на стороне сервера, вставленной на страницу PHP или где угодно.

 <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 

C. Я запускаю функцию java автоматически при загрузке страницы.

 <script> $( document ).ready(function() { 

D. получить привязку (#tesla) от URL-адреса, полученного сервером

 var myhash1 = $(location).attr('hash'); //myhash1 == #tesla 

E. обрезать хеш-знак

 myhash1 = myhash1.substr(1) //myhash1 == tesla 

F. Мне нужно выделить термин и описание, поэтому я создаю новый var

 var myhash2 = '1'; myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1 

G. Теперь я могу манипулировать цветом текста для термина и описания

 var elem = document.getElementById(myhash1); elem.style.color = 'blue'; elem = document.getElementById(myhash2); elem.style.color = 'blue'; }); </script> 

H. Это работает. клиент нажимает ссылку на стороне клиента (xyz.com # tesla) и подходит к термину. термин и описание выделены синим цветом по javascript для быстрого чтения. все остальные записи остались в черном ..