Pertanyaan Dapatkan fragmen (nilai setelah hash '#') dari sebuah URL dalam php


Bagaimana saya bisa mendapatkan fragmen (nilai setelah hash '#') dari URL di php?

Katakan dari http://domain.com/site/gallery/1#photo45 saya ingin photo45


76
2018-02-23 11:03


asal


Jawaban:


Jika Anda ingin mendapatkan nilai setelah tanda pagar atau jangkar seperti yang ditampilkan di browser pengguna: Ini tidak mungkin dengan HTTP "standar" karena nilai ini tidak pernah dikirim ke server (karena itu tidak akan tersedia di $_SERVER["REQUEST_URI"] atau variabel standar yang serupa). Anda akan membutuhkan semacam keajaiban JavaScript di sisi klien, mis. untuk memasukkan nilai ini sebagai parameter POST.

Jika hanya tentang menguraikan URL yang dikenal dari sumber apa pun, maka dijawab oleh mck89 baik-baik saja.


97
2018-02-23 11:05



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

36
2018-02-23 11:05



A) sudah memiliki url dengan #hash di PHP? Mudah! Pisahkan saja!

if( strpos( $url, "#" ) === false ) echo "NO HASH !";
   else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0

Atau di PHP "lama" Anda harus menyimpannya terlebih dahulu agar dapat mengakses array:

$exploded_url = explode( "#", $url ); $exploded_url[1]; 

B) Anda ingin mendapatkan #hash dengan mengirimkan formulir ke PHP?
=> Gunakan beberapa MAGIC JavaScript! (Untuk pra-memproses formulir)

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 oleh:
  $_GET['fragment'] atau $_POST['fragment']

Kemungkinan pengembalian: 1 ""[string kosong] (tidak ada hash) 2. seluruh hash TERMASUK #Tanda [hash] (karena kami telah menggunakan window.location.hash di JavaScript yang hanya berfungsi seperti itu :))

C) Anda ingin mendapatkan #hash dalam PHP HANYA dari URL yang diminta?

ANDA TIDAK BISA!

... (tidak sedang mempertimbangkan permintaan HTTP biasa) ...

... Semoga ini membantu :)


24
2017-12-09 01:48



Saya sudah mencari solusi untuk ini untuk sedikit - dan satu-satunya hal yang saya temukan adalah menggunakan penulisan ulang URL untuk membaca "jangkar". Saya menemukan dalam dokumen apache di sini http://httpd.apache.org/docs/2.2/rewrite/advanced.html pengikut...

Secara default, mengalihkan ke anchor HTML tidak berfungsi, karena mod_rewrite luput dari karakter #, mengubahnya menjadi% 23.   Ini, pada gilirannya, melanggar redirection.

Solusi: Gunakan bendera [NE] pada RewriteRule. NE adalah singkatan dari No   Melarikan diri.

Diskusi: Teknik ini tentu saja juga akan bekerja dengan khusus lainnya   karakter yang mod_rewrite, secara default, URL-encode.

Mungkin ada peringatan lain dan apa yang tidak ... tapi saya pikir setidaknya melakukan sesuatu dengan # pada server adalah mungkin.


8
2017-11-21 19:48



Anda tidak bisa mendapatkan teks setelah tanda pagar. Itu tidak dikirim ke server dalam sebuah permintaan.


3
2018-02-23 11:05



Saya menemukan trik ini, jika Anda bersikeras ingin nilai dengan php .. membagi nilai anchor (#) dan mendapatkannya dengan javascript, lalu simpan sebagai cookie, setelah itu dapatkan nilai cookie dengan php ~

http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/ 


3
2017-12-14 03:31



Anda bisa melakukan penggantian string di sisi klien kemudian sisi server. Bukan solusi yang sangat kuat tetapi jika Anda tidak memiliki solusi cepat seperti saya, itu sudah cukup saya kira.

Klien:

var tempString = stringVal.replace('#', 'hashtag');

Server:

$user_message = $_GET['userMessage'];
$user_message = str_replace("hashtag", "#", $user_message);

0
2017-12-13 22:51



Mendapatkan data setelah tanda pagar dalam string kueri sederhana. Berikut ini contoh yang digunakan ketika klien mengakses daftar istilah dari sebuah buku. Ini mengambil nama anchor yang disampaikan (#tesla), dan mengirimkan klien ke istilah itu dan menyoroti istilah dan deskripsinya dengan warna biru sehingga mudah dilihat.

A. atur string Anda dengan id div, sehingga nama anchor berjalan sesuai dengan yang seharusnya dan javascript dapat mengubah warna teks

<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>

B. Gunakan Javascript untuk melakukan pekerjaan berat, di sisi server, disisipkan di 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 ketika halaman dimuat.

<script>
$( document ).ready(function() {

D. dapatkan anchor (#tesla) dari url yang diterima oleh server

var myhash1 = $(location).attr('hash'); //myhash1 == #tesla

E. potong tanda hash dari itu

myhash1 = myhash1.substr(1)  //myhash1 == tesla

F. Saya perlu menyoroti istilah dan deskripsi sehingga 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. tautan klik klien di sisi klien (xyz.com # tesla) dan langsung ke istilah. istilah dan deskripsi disorot dengan warna biru oleh javascript untuk membaca cepat .. semua entri lainnya tersisa dalam warna hitam ..


-3
2018-02-05 02:13