Как я могу получить фрагмент (значение после 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
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];
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, который работает именно так :))
… (не учитывая регулярные 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 для быстрого чтения. все остальные записи остались в черном ..