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
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
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.
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:
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
$fragment = parse_url("http://example.com/site/gallery/1#photo45", PHP_URL_FRAGMENT);
if( strpos( $url, "#" ) === false ) echo "NO HASH !";
else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0
Atau dalam PHP "lama" Anda harus menyimpan terlebih dahulu yang meledak untuk mengakses array:
$exploded_url = explode( "#", $url ); $exploded_url[1];
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
});
Tergantung pada Anda form
's method
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 menggunakan window.location.hash
di JavaScript yang berfungsi seperti itu :))
... (tidak saat mempertimbangkan permintaan HTTP biasa) ...
... Semoga ini membantu :)
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 ...
Secara default, mengalihkan ke jangkar HTML tidak berfungsi, karena mod_rewrite mengesampingkan karakter #, mengubahnya menjadi% 23. Ini, pada gilirannya, memutus pengalihan.
Solusi: Gunakan flag [NE] pada RewriteRule. NE adalah singkatan dari No Escape.
Diskusi: Teknik ini tentunya juga akan bekerja dengan karakter khusus lainnya yang mod_rewrite, secara default, URL-encode.
Mungkin ada peringatan lain dan apa yang tidak ... tapi saya pikir setidaknya melakukan sesuatu dengan # di server itu mungkin.
Anda tidak bisa mendapatkan teks setelah tanda pagar . Itu tidak dikirim ke server dalam permintaan.
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 PHP
Anda dapat melakukannya dengan kombinasi javascript dan php:
<div id="cont"></div>
Dan di sisi lain;
<script>
var h = window.location.hash;
var h1 = (win.substr(1));//string with no #
var q1 = '<input type="text" id="hash" name="hash" value="'+h1+'">';
setInterval(function(){
if(win1!="")
{
document.querySelector('#cont').innerHTML = q1;
} else alert("Something went wrong")
},1000);
</script>
Kemudian, pada pengiriman formulir Anda dapat mengambil nilainya melalui $ _POST ['hash'] (setel formulir)
Jika Anda ingin mengambil hash dari URL secara dinamis, ini harus berfungsi: https://stackoverflow.com/a/57368072/2062851
<script>
var hash = window.location.hash, //get the hash from url
cleanhash = hash.replace("#", ""); //remove the #
//alert(cleanhash);
</script>
<?php
$hash = "<script>document.writeln(cleanhash);</script>";
echo $hash;
?>
Anda perlu mengurai url terlebih dahulu, jadi seperti ini:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Jika Anda perlu mengurai url sebenarnya dari browser saat ini, Anda perlu meminta untuk memanggil server.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
tidak tidak termasuk #fragment
Mendapatkan 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
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. Menggunakan Javascript untuk melakukan pekerjaan berat, di sisi server, dimasukkan ke halaman PHP Anda, atau di mana pun ..
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. Saya meluncurkan fungsi java secara otomatis saat halaman dimuat.
<script>
$( document ).ready(function() {
D. mendapatkan jangkar (#tesla) dari url yang diterima oleh server
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. potong tanda hash itu
myhash1 = myhash1.substr(1) //myhash1 == tesla
F. Saya perlu menyorot istilah dan deskripsi jadi saya membuat var baru
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G. Sekarang saya dapat memanipulasi warna teks untuk istilah dan deskripsi
var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>
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 ..