9 ответов:
Если вы хотите получить значение после хэш-метки или якоря, как показано в браузере пользователя: это невозможно с помощью" стандартного " 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) вы хотите получить #хэш, отправив форму на PHP?
=> используйте магию JavaScript! (Для предварительной обработки формы)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' smethodатрибут вы получаете этот хэш в PHP с помощью:$_GET['fragment']или$_POST['fragment']возможно возвращает: 1.
""[пустая строка] (без хэша) 2. весь хэш, включая#[хеш] знак (потому что мы использовалиwindow.location.hashв JavaScript, который просто работает таким образом :))C) Вы хотите получить #хэш в PHP просто из запрошенного URL?
ВЫ НЕ МОЖЕТЕ !
...(не считая обычных HTTP-запросов)...
...Надеюсь, это помогло:)
Я искал обходной путь для этого немного - и единственное, что я нашел, это использовать перезапись URL для чтения "якоря". Я нашел в Apache docs здесь http://httpd.apache.org/docs/2.2/rewrite/advanced.html следующее...
по умолчанию перенаправление на привязку HTML не работает, потому что mod_rewrite экранирует символ#, превращая его в %23. Это, в свою очередь, нарушает перенаправление.
решение: использовать [NE] флаг на Рерайтере. Не стоит без Побег.
Обсуждение: этот метод, конечно, также будет работать с другими специальными символы, которые 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);
получаем данные после символа в строке запроса проста. Вот пример, используемый, когда клиент обращается к глоссарию терминов из книги. Он принимает имя anchor delivered (#tesla) и доставляет клиента к этому термину и выделяет термин и его описание синим цветом, чтобы его было легко увидеть.
A. установите свои строки с идентификатором 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Е. обрезать хэш-знак от него
myhash1 = myhash1.substr(1) //myhash1 == teslaF. мне нужно выделить термин и описание, поэтому я создаю новый var
var myhash2 = '1'; myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1G. Теперь я могу манипулируйте цветом текста для термина и описания
var elem = document.getElementById(myhash1); elem.style.color = 'blue'; elem = document.getElementById(myhash2); elem.style.color = 'blue'; }); </script>х. Это работает. клиент нажимает ссылку на стороне клиента (xyz. com#tesla) и переходит прямо к термину. термин и описание выделены синим цветом javascript для быстрого чтения .. все остальные записи оставлены черным цветом..
Comments