Dengan asumsi URL:
www.example.com/?val=1#part2
PHP dapat membaca variabel permintaan val1
menggunakan array GET.
Apakah nilai hash part2
juga dapat dibaca? Atau ini hanya terserah browser dan JavaScript?
Dengan asumsi URL:
www.example.com/?val=1#part2
PHP dapat membaca variabel permintaan val1
menggunakan array GET.
Apakah nilai hash part2
juga dapat dibaca? Atau ini hanya terserah browser dan JavaScript?
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.
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 amanHash tidak pernah dikirim ke server, jadi tidak.
sumber
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/
sumber
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
sumber
Bagaimana dengan:
Ambil hash # secara dinamis
Untuk membuatnya lebih lancar:
Contoh lengkap hanya menggunakan Javascript dan PHP
sumber
Saya pikir nilai hash hanya digunakan sisi klien, jadi Anda tidak bisa mendapatkannya dengan php.
Anda bisa mengarahkannya dengan javascript ke php.
sumber
Ini seharusnya bekerja
sumber
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
.sumber
Ya kamu bisa:
Gunakan metode ini untuk mencegah kesalahan:
Dan tentu saja dalam PHP, meledak anak anjing itu dan dapatkan salah satu nilainya
sumber
Solusi lain adalah menambahkan bidang input tersembunyi ke halaman php:
Menggunakan javascript / jQuery Anda dapat mengatur nilai bidang ini pada pemuatan halaman atau merespons suatu peristiwa:
Dalam php di sisi server Anda dapat membaca nilai ini menggunakan koleksi $ _POST:
sumber
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
sumber