Відповіді:
Основна проблема полягає в тому, що браузер навіть не надсилає запит із частиною фрагменту. Частина фрагмента вирішена прямо там, у браузері. Тож це доступно через JavaScript.
У будь-якому випадку ви можете розібрати URL-адресу на біти, включаючи частину фрагмента, використовуючи parse_url () , але це, очевидно, не так.
Простий тест, доступ до http: // localhost: 8000 / hello? Foo = bar # this-is-not-send-to-server
python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -
Сервер отримує запит без #appendage - все після тегу хеша - це просто пошук прив'язки клієнта.
Ви можете знайти ім'я якоря, яке використовується в URL-адресі через javascript, використовуючи, як приклад:
<script>alert(window.location.hash);</script>
Функція parse_url () в PHP може працювати, якщо у вас вже є потрібна рядок URL-адреси, включаючи фрагмент ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Але я не думаю, що PHP отримує інформацію про фрагменти, тому що це лише клієнт.
Це можна отримати з Javascript - as window.location.hash
. Звідти ви можете, наприклад, надіслати його на сервер за допомогою Ajax або кодувати його і ввести його в URL-адреси, які потім можуть бути передані на сторону сервера.
Хеш ніколи не надсилається на сервер, так що ні.
Так, це правда, сервер не отримує якірної частини. Однак існує рішення щодо використання файлів cookie. Ви можете знайти його тут: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
Відповідь - ні.
Основне призначення хешу - прокрутка до певної частини сторінки, де ви визначили закладку. наприклад, Перейдіть до цієї частини під час завантаження сторінки.
Перегляд буде прокручуватися таким чином, що цей рядок є першим видимим вмістом на сторінці, залежно від того, скільки вмісту слід нижче рядка.
Так, JavaScript може отримати доступ до нього, і тоді простий дзвінок Ajax зробить магію
А як на рахунок:
Динамічно захопіть #hash
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
//alert(txthash);
</script>
<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>
Щоб зробити його більш вільним:
Повний приклад із використанням лише Javascript та PHP
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
function changehash(a,b){
window.location.hash = b; //add hash to url
//alert(b); //alert to test
location.reload(); //reload page to show the current hash
}
</script>
<?php $hash = "<script>document.writeln(txthash);</script>";?>
<a onclick="changehash(this,'#hash1')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/>
<?php echo "This is the current hash: " . $hash; ?>
Я думаю, що хеш-значення використовується лише на стороні клієнта, тому ви не можете отримати його за допомогою php.
Ви можете перенаправити його за допомогою javascript на php.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Це має працювати
Частина URI після цього #
називається "фрагмент" і за визначенням доступна / обробляється лише на стороні клієнта (див. Https://en.wikipedia.org/wiki/Fragment_identifier ).
На стороні клієнта це можна отримати за допомогою javaScript з window.location.hash
.
Так, ти можеш:
Використовуйте цей метод для запобігання помилок:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
І звичайно в PHP, підірвати цього цуценя і отримати одне із значень
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Ще одне рішення - додати приховане поле введення на сторінку php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
За допомогою javascript / jQuery ви можете встановити значення цього поля під час завантаження сторінки або відповіді на подію:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
У php на стороні сервера ви можете прочитати це значення за допомогою колекції $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
Ми можемо це зробити і з іншим підходом. Як і в першу чергу, отримаємо хеш-значення від js та викликаємо ajax за допомогою цього параметра і можемо робити все, що нам хочеться
www.example.com/?val=1#part2
Вам доведеться перенаправляти його на сервер, як це:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
і, звичайно, вам доведеться додати підтримку, щоб перенаправити на інший URL на іншій сторінці. Звичайно, це не дивовижно, але це не працює для всіх випадків використання, але працює для закладок. Зауважте, що якщо ви це зробите, вам не слід дозволяти переадресацію на абсолютні URL-адреси, лише на відносні URL-адреси, щоб не відкривати себе для небезпечних переадресацій