Câu hỏi Lấy mảnh (giá trị sau băm '#') từ một URL trong php


Làm thế nào tôi có thể nhận được mảnh (giá trị sau khi băm '#') từ một URL trong php?

Nói từ http://domain.com/site/gallery/1#photo45 tôi muốn photo45


76
2018-02-23 11:03


gốc


@ile en.wikipedia.org/wiki/Hash_symbol - Pekka 웃
Nhân đôi hoặc ít nhất trên cùng một dòng như stackoverflow.com/questions/1957030/…, stackoverflow.com/questions/1162008/… và stackoverflow.com/questions/2181290/… - Gordon
có thể trùng lặp Làm thế nào để có được giá trị sau khi băm trong "somepage.php # name"? - PhoneixS


Các câu trả lời:


Nếu bạn muốn nhận được giá trị sau dấu băm hoặc neo như được hiển thị trong trình duyệt của người dùng: Điều này là không thể với HTTP "chuẩn" vì giá trị này không bao giờ được gửi đến máy chủ (do đó nó sẽ không có sẵn trong $_SERVER["REQUEST_URI"] hoặc các biến được xác định trước tương tự). Bạn sẽ cần một số loại ma thuật JavaScript ở phía khách hàng, ví dụ: để bao gồm giá trị này dưới dạng tham số POST.

Nếu nó chỉ phân tích cú pháp một URL đã biết từ bất kỳ nguồn nào, trả lời bởi mck89 là hoàn toàn tốt mặc dù.


97
2018-02-23 11:05



alert(window.location.hash); - sfussenegger
chỉ là một lưu ý: window.location.hash giúp bạn toàn bộ mảnh bao gồm # [băm] ký ... và dĩ nhiên, trong JavaScript :) - jave.web
BTW: JavaScript ma thuật: D: D: D: D: D ...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); }); ... tùy thuộc vào "phương thức" của biểu mẫu, bạn sẽ nhận được băm $_POST['fragment'] hoặc là $_GET['fragment'] .... MA THUẬT! - jave.web
giá trị sau khi hashmark có thể được nhận từ phía máy chủ. Tôi hiển thị một giải pháp dưới đây. - JamesAD-0


Phần đó được gọi là "mảnh vỡ" và bạn có thể hiểu nó theo cách này:

$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment

36
2018-02-23 11:05



Điều đó rất tốt nhưng sẽ không có lỗi nếu bạn thêm `` `$ fragment = isset ($ url ['fragment'])? '#'. $ url ['fragment']: ''; `` `Nhưng vẫn Thumbs Up !! - John Max
điều này làm việc cho một url được lưu bên trong một chuỗi không phải là url thực tế từ thanh địa chỉ của trình duyệt - Muhammad Omer Aslam


A) đã có url với #hash trong PHP? Dễ dàng! Chỉ cần phân tích nó ra!

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

Hoặc trong PHP "cũ", bạn phải lưu trước khi phát nổ để truy cập mảng:

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

B) Bạn muốn nhận được #hash bằng cách gửi biểu mẫu tới PHP?
=> Sử dụng một số MAGIC JavaScript! (Để xử lý trước biểu mẫu)

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
});

Phụ thuộc vào bạn form'S method bạn nhận được băm này trong PHP bằng cách:
  $_GET['fragment'] hoặc là $_POST['fragment']

Lợi nhuận có thể có: 1. ""[chuỗi rỗng] (không có băm) 2. toàn bộ băm BAO GỒM #ký hiệu [băm] (vì chúng tôi đã sử dụng window.location.hash trong JavaScript chỉ hoạt động theo cách đó :))

C) Bạn muốn lấy #hash trong PHP CHỈ từ URL được yêu cầu?

BẠN KHÔNG THỂ!

... (không phải trong khi xem xét các yêu cầu HTTP thông thường) ...

... Hy vọng điều này đã giúp :)


24
2017-12-09 01:48





Tôi đã tìm kiếm một cách giải quyết cho điều này một chút - và điều duy nhất tôi đã tìm thấy là sử dụng URL viết lại để đọc "neo". Tôi tìm thấy trong tài liệu apache ở đây http://httpd.apache.org/docs/2.2/rewrite/advanced.html sau đây ...

Theo mặc định, chuyển hướng đến một neo HTML không hoạt động, vì mod_rewrite thoát ký tự #, biến nó thành% 23.   Điều này, đến lượt nó, phá vỡ sự chuyển hướng.

Giải pháp: Sử dụng cờ [NE] trên RewriteRule. NE là viết tắt của No   Bỏ trốn.

Thảo luận: Kỹ thuật này dĩ nhiên cũng sẽ hoạt động với các chương trình đặc biệt khác   các ký tự mod_rewrite, theo mặc định, mã hóa URL.

Nó có thể có những lời khuyên khác và những gì không ... nhưng tôi nghĩ rằng ít nhất làm một cái gì đó với # trên máy chủ là có thể.


8
2017-11-21 19:48





Bạn không thể nhận được văn bản sau dấu băm. Nó không được gửi đến máy chủ trong một yêu cầu.


3
2018-02-23 11:05





Tôi tìm thấy thủ thuật này, nếu u nhấn mạnh muốn có giá trị với php .. chia giá trị neo (#) và nhận nó với javascript, sau đó lưu trữ dưới dạng cookie, sau đó nhận được giá trị cookie với php ~

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


3
2017-12-14 03:31





Bạn có thể làm một chuỗi thay thế ở phía khách hàng sau đó phía máy chủ. Không phải là một giải pháp đặc biệt mạnh mẽ nhưng nếu bạn không phải là một giải pháp nhanh chóng như tôi thì tôi sẽ nghĩ như vậy.

Khách hàng:

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

Máy chủ:

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

0
2017-12-13 22:51





Lấy dữ liệu sau khi hashmark trong một chuỗi truy vấn rất đơn giản. Dưới đây là một ví dụ được sử dụng khi khách hàng truy cập một bảng thuật ngữ các thuật ngữ từ một cuốn sách. Nó lấy tên anchor được phân phối (#tesla) và cung cấp cho khách hàng cụm từ đó và làm nổi bật cụm từ và mô tả của nó bằng màu xanh để dễ nhìn thấy.

A. thiết lập các chuỗi của bạn với một id div, do đó, tên neo đi nơi nó được cho là và javascript có thể thay đổi màu sắc văn bản

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

B. Sử dụng Javascript để thực hiện công việc nặng nhọc, ở phía máy chủ, được chèn vào trang PHP của bạn hoặc bất cứ nơi nào ..

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

C. Tôi tự động khởi chạy hàm java khi trang được tải.

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

D. lấy neo (#tesla) từ url nhận được bởi máy chủ

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

E. cắt dấu băm ra khỏi nó

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

F. Tôi cần làm nổi bật thuật ngữ và mô tả để tôi tạo một biến mới

var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1

G. Bây giờ tôi có thể thao tác màu văn bản cho thuật ngữ và mô tả

var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>

H. Điều này hoạt động. khách hàng nhấp vào liên kết trên phía khách hàng (xyz.com # tesla) và đi ngay đến thuật ngữ. thuật ngữ và mô tả được đánh dấu bằng màu xanh dương bằng javascript để đọc nhanh .. tất cả các mục còn lại đều có màu đen ..


-3
2018-02-05 02:13



Câu trả lời này chỉ đề cập đến việc xử lý phía máy khách của đoạn, trong khi câu hỏi là về phía máy chủ (với PHP). - Martijn Heemels
với việc thiết lập phía máy khách đúng cách, thì phía máy chủ rất dễ dàng với PHP. - JamesAD-0