Как я могу получить фрагмент (значение после hash '#') из URL-адреса в php?
Скажем из http://domain.com/site/gallery/1#photo45
Я хочу photo45
Как я могу получить фрагмент (значение после 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
});
В зависимости от вашего атрибута 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 Побег.
Обсуждение: этот метод, конечно же, будет работать и с другими специальными символов, которые mod_rewrite, по умолчанию, URL-кодирует.
У него могут быть другие оговорки, а что нет... но я думаю, что возможно хотя бы сделать что-то С# на сервере.
Вы не можете получить текст после метки . Он не отправляется на сервер в запросе.
Я нашел этот трюк, если и настаиваю, хочу ли значение с php.. разделите значение привязки (#) и получите его с помощью javascript, а затем сохраните как cookie, после чего получите значение cookie с помощью php ~
http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
Сначала вам нужно разобрать URL-адрес, поэтому он выглядит следующим образом:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Если вам нужно проанализировать фактический URL-адрес текущего браузера, вам необходимо запросить вызов сервера.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Вы можете заменить строку на стороне клиента, а затем на стороне сервера. Не особенно надежное решение, но если вы не найдете такого быстрого решения, как я, это будет достаточно, я думаю.
Клиент:
var tempString = stringVal.replace('#', 'hashtag');
Сервер:
$user_message = $_GET['userMessage'];
$user_message = str_replace("hashtag", "#", $user_message);
Получение данных после хэшмарка в строке запроса прост. Вот пример, используемый для того, когда клиент обращается к глоссарию терминов из книги. Он берет имя якоря, доставленного (#tesla), и доставляет клиенту этот термин и выделяет термин и его описание синим цветом, поэтому его легко увидеть.
а. настройте свои строки с идентификатором div, поэтому якорь имен отправляется туда, где его предполагается, и javascript может изменять цвета текста
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
В. Используйте Javascript для выполнения тяжелой работы на стороне сервера, вставленной на страницу PHP, или где бы вы ни были.
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
С. Я запускаю функцию java автоматически при загрузке страницы.
<script>
$( document ).ready(function() {
Д. получить привязку (#tesla) от URL-адреса, полученного сервером
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
Е. обрезать хеш-знак от него
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>
Н. Это работает. клиент нажимает ссылку на стороне клиента (xyz.com # tesla) и подходит к термину. термин и описание выделены синим цветом javascript для быстрого чтения. все остальные записи остались черными..