Jawaban:
Masalah utama adalah bahwa browser bahkan tidak akan mengirim permintaan dengan bagian fragmen. Bagian fragmen diselesaikan di sana di browser. Jadi bisa dijangkau melalui JavaScript.
Bagaimanapun, Anda dapat mem-parsing URL menjadi bit, termasuk bagian fragmen, menggunakan parse_url () , tapi itu jelas bukan kasus Anda.
Tes sederhana, mengakses http: // localhost: 8000 / hello? Foo = bar # this-is-not-sent-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 -
Server menerima permintaan tanpa lampiran # - apa pun setelah tag hash hanyalah pencarian jangkar pada klien.
Anda dapat menemukan nama jangkar yang digunakan dalam URL melalui javascript menggunakan, sebagai contoh:
<script>alert(window.location.hash);</script>
Fungsi parse_url () di PHP dapat berfungsi jika Anda sudah memiliki string URL yang diperlukan termasuk fragmen ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Tapi saya tidak berpikir PHP menerima informasi fragmen karena hanya untuk klien.
Ini diambil dari Javascript - as window.location.hash
. Dari sana Anda bisa mengirimnya ke server dengan Ajax misalnya, atau menyandikannya dan memasukkannya ke URL yang kemudian dapat diteruskan ke sisi server.
Hash tidak pernah dikirim ke server, jadi tidak.
Ya itu benar, server tidak mendapatkan jangkar. Namun ada solusi menggunakan cookie. Anda dapat menemukannya di sini: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
Jawabannya adalah tidak.
Tujuan utama hash adalah untuk menggulir ke bagian tertentu dari halaman di mana Anda telah menetapkan bookmark. mis. Gulir ke Bagian ini ketika halaman dimuat.
Penelusuran akan menggulir sedemikian rupa sehingga baris ini adalah konten pertama yang terlihat di halaman, tergantung pada seberapa banyak konten yang mengikuti di bawah garis.
Ya javascript dapat mengaksesnya, dan kemudian panggilan ajax sederhana akan melakukan keajaiban
Bagaimana dengan:
Ambil hash # secara dinamis
<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;
?>
Untuk membuatnya lebih lancar:
Contoh lengkap hanya menggunakan Javascript dan 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; ?>
Saya pikir nilai hash hanya digunakan sisi klien, jadi Anda tidak bisa mendapatkannya dengan php.
Anda bisa mengarahkannya dengan javascript ke php.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Ini seharusnya bekerja
Bagian dari URI setelah #
disebut "fragmen" dan menurut definisi hanya tersedia / diproses di sisi klien (lihat https://en.wikipedia.org/wiki/Fragment_identifier ).
Di sisi klien, ini dapat diakses menggunakan javaScript dengan window.location.hash
.
Ya kamu bisa:
Gunakan metode ini untuk mencegah kesalahan:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
Dan tentu saja dalam PHP, meledak anak anjing itu dan dapatkan salah satu nilainya
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Solusi lain adalah menambahkan bidang input tersembunyi ke halaman php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Menggunakan javascript / jQuery Anda dapat mengatur nilai bidang ini pada pemuatan halaman atau merespons suatu peristiwa:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
Dalam php di sisi server Anda dapat membaca nilai ini menggunakan koleksi $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
Kita dapat melakukannya dengan pendekatan lain juga, Seperti pertama-tama dapatkan nilai hash dari js dan panggil ajax menggunakan parameter itu dan dapat melakukan apa pun yang kita inginkan
www.example.com/?val=1#part2
Anda harus mengarahkan ulang ke server, seperti ini:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
dan tentu saja Anda harus menambahkan dukungan untuk mengarahkan ke url lain di halaman lain Anda. Tidak mengagumkan, dan tentu saja tidak berfungsi untuk semua kasus penggunaan, tetapi berfungsi untuk bookmark. Perhatikan bahwa jika Anda melakukan ini, Anda tidak boleh mengizinkan pengalihan ke url absolut, hanya url relatif, untuk memastikan Anda tidak membuka diri terhadap pengalihan yang tidak aman