Bagaimana cara memilih fragmen setelah simbol '#' di URL saya menggunakan PHP?
Hasil yang saya inginkan adalah "photo45".
Ini adalah contoh URL:
http://example.com/site/gallery/1#photo45
php
url
anchor
url-fragment
ilija veselica
sumber
sumber
Jawaban:
Jika Anda ingin mendapatkan nilai setelah tanda pagar atau jangkar seperti yang ditampilkan di browser pengguna: Ini tidak mungkin dilakukan dengan HTTP "standar" karena nilai ini tidak pernah dikirim ke server (karenanya tidak akan tersedia di
$_SERVER["REQUEST_URI"]
atau serupa variabel standar). Anda akan membutuhkan semacam keajaiban JavaScript di sisi klien, misalnya untuk memasukkan nilai ini sebagai parameter POST.Jika ini hanya tentang mem-parsing URL yang dikenal dari sumber apa pun, jawaban mck89 baik-baik saja.
sumber
alert(window.location.hash);
window.location.hash
memberi Anda seluruh fragmen TERMASUK tanda#
[hash] ... dan itu, tentu saja, dalam JavaScript :)var forms = document.getElementsByTagName('form'); for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit',function(){ var hidden = document.createElement("input"); hidden.setAttribute('type','hidden'); hidden.setAttribute('name','fragment'); hidden.setAttribute('value',window.location.hash); this.appendChild(hidden); });
... tergantung pada "metode" formulir Anda, Anda mendapatkan hash dengan$_POST['fragment']
atau$_GET['fragment']
.... MAGIC!Bagian itu disebut "fragmen" dan Anda bisa mendapatkannya dengan cara ini:
sumber
$fragment = parse_url("http://example.com/site/gallery/1#photo45", PHP_URL_FRAGMENT);
A) sudah memiliki url dengan #hash di PHP? Mudah! Parse saja!
Atau dalam PHP "lama" Anda harus menyimpan terlebih dahulu yang meledak untuk mengakses array:
B) Anda ingin mendapatkan #hash dengan mengirimkan formulir ke PHP?
=> Gunakan beberapa JavaScript MAGIC! (Untuk memproses formulir sebelumnya)
Tergantung pada Anda
form
'smethod
atribut Anda mendapatkan hash ini di PHP dengan:$_GET['fragment']
atau$_POST['fragment']
Kemungkinan pengembalian: 1.
""
[string kosong] (tanpa hash) 2. seluruh hash TERMASUK tanda#
[hash] (karena kita telah menggunakanwindow.location.hash
di JavaScript yang berfungsi seperti itu :))C) Anda ingin mendapatkan #hash di PHP HANYA dari URL yang diminta?
ANDA TIDAK BISA!
... (tidak saat mempertimbangkan permintaan HTTP biasa) ...
... Semoga ini membantu :)
sumber
Saya telah mencari solusi untuk ini sebentar - dan satu-satunya hal yang saya temukan adalah menggunakan penulisan ulang URL untuk membaca "jangkar". Saya menemukan di apache docs di sini http://httpd.apache.org/docs/2.2/rewrite/advanced.html berikut ini ...
Mungkin ada peringatan lain dan apa yang tidak ... tapi saya pikir setidaknya melakukan sesuatu dengan # di server itu mungkin.
sumber
Anda tidak bisa mendapatkan teks setelah tanda pagar . Itu tidak dikirim ke server dalam permintaan.
sumber
Saya menemukan trik ini jika Anda bersikeras menginginkan nilai dengan PHP. pisahkan nilai anchor (
#
) dan dapatkan dengan JavaScript, lalu simpan sebagai cookie, setelah itu dapatkan nilai cookie dengan PHPsumber
Anda dapat melakukannya dengan kombinasi javascript dan php:
Dan di sisi lain;
Kemudian, pada pengiriman formulir Anda dapat mengambil nilainya melalui $ _POST ['hash'] (setel formulir)
sumber
Jika Anda ingin mengambil hash dari URL secara dinamis, ini harus berfungsi: https://stackoverflow.com/a/57368072/2062851
sumber
Anda perlu mengurai url terlebih dahulu, jadi seperti ini:
Jika Anda perlu mengurai url sebenarnya dari browser saat ini, Anda perlu meminta untuk memanggil server.
sumber
$_SERVER['REQUEST_URI']
tidak tidak termasuk #fragmentMendapatkan data setelah tanda pagar dalam string kueri itu sederhana. Berikut adalah contoh yang digunakan saat klien mengakses daftar istilah dari sebuah buku. Ini mengambil nama jangkar yang dikirimkan (#tesla), dan mengantarkan klien ke istilah itu dan menyoroti istilah dan deskripsinya dengan warna biru sehingga mudah dilihat.
A. menyiapkan string Anda dengan id div, sehingga nama jangkar pergi ke tempat yang seharusnya dan javascript dapat mengubah warna teks
B. Menggunakan Javascript untuk melakukan pekerjaan berat, di sisi server, dimasukkan ke halaman PHP Anda, atau di mana pun ..
C. Saya meluncurkan fungsi java secara otomatis saat halaman dimuat.
D. mendapatkan jangkar (#tesla) dari url yang diterima oleh server
E. potong tanda hash itu
F. Saya perlu menyorot istilah dan deskripsi jadi saya membuat var baru
G. Sekarang saya dapat memanipulasi warna teks untuk istilah dan deskripsi
H. Ini berhasil. klien mengklik tautan di sisi klien (xyz.com # tesla) dan langsung menuju istilah. istilah dan deskripsi disorot dengan warna biru oleh javascript untuk membaca cepat .. semua entri lainnya dibiarkan hitam ..
sumber