Làm cách nào để tôi có thể chọn phân đoạn sau ký hiệu '#' trong URL của mình bằng PHP?
Kết quả mà tôi muốn là "photo45".
Đây là một URL mẫu:
http://example.com/site/gallery/1#photo45
Làm cách nào để tôi có thể chọn phân đoạn sau ký hiệu '#' trong URL của mình bằng PHP?
Kết quả mà tôi muốn là "photo45".
Đây là một URL mẫu:
http://example.com/site/gallery/1#photo45
Câu trả lời:
Nếu bạn muốn nhận giá trị sau dấu thăng hoặc ký tự liên kết như được hiển thị trong trình duyệt của người dùng: Điều này không thể xảy ra 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 tương tự biến xác định trước). Bạn sẽ cần một số loại phép thuật JavaScript ở phía máy khách, ví dụ: để bao gồm giá trị này dưới dạng tham số POST.
Nếu chỉ về phân tích cú pháp một URL đã biết từ bất kỳ nguồn nào thì câu trả lời của mck89 là hoàn toàn ổn.
alert(window.location.hash);
window.location.hash
giúp bạn toàn bộ đoạn BAO GỒM các #
[băm] dấu ... và nó là, tất nhiên, trong 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); });
... tùy thuộc vào "phương thức" của biểu mẫu mà bạn nhận được hàm băm bằng $_POST['fragment']
hoặc $_GET['fragment']
.... MAGIC!
Phần đó được gọi là "phân mảnh" và bạn có thể lấy nó theo cách này:
$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
Hoặc trong PHP "cũ", bạn phải lưu trữ trước phần mềm đã phát nổ để truy cập vào mảng:
$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
});
Tùy thuộc vào bạn form
's method
thuộc tính bạn nhận được băm này trong PHP bởi:
$_GET['fragment']
hoặc$_POST['fragment']
Khả năng trả về: 1. ""
[chuỗi trống] (không có băm) 2. toàn bộ băm BAO GỒM dấu #
[băm] (vì chúng tôi đã sử dụng window.location.hash
trong JavaScript mà chỉ hoạt động theo cách đó :))
... (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 :)
Tôi đã tìm kiếm giải pháp thay thế cho vấn đề này một chút - và điều duy nhất tôi tìm thấy là sử dụng ghi lại URL để đọc "neo". Tôi tìm thấy tài liệu apache tại đây http://httpd.apache.org/docs/2.2/rewrite/advanced.html sau đây ...
Theo mặc định, chuyển hướng đến một liên kết HTML không hoạt động vì mod_rewrite thoát khỏi 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 Escape.
Bàn luận: Kỹ thuật này tất nhiên cũng sẽ hoạt động với các ký tự đặc biệt khác mà mod_rewrite, theo mặc định, mã hóa URL.
Nó có thể có những cảnh báo khác và những gì không ... nhưng tôi nghĩ rằng ít nhất có thể làm điều gì đó với # trên máy chủ.
Bạn không thể lấy văn bản sau dấu thăng . Nó không được gửi đến máy chủ trong một yêu cầu.
Tôi đã tìm thấy mẹo này nếu bạn muốn giá trị với PHP. tách #
giá trị anchor ( ) và lấy nó bằng JavaScript, sau đó lưu trữ dưới dạng cookie, sau đó lấy giá trị cookie bằng PHP
Bạn có thể làm điều đó bằng sự kết hợp của javascript và php:
<div id="cont"></div>
Và bên kia;
<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>
Sau đó, khi gửi biểu mẫu, bạn có thể lấy giá trị qua $ _POST ['hash'] (đặt biểu mẫu)
Nếu bạn muốn tự động lấy mã băm từ URL, điều này sẽ hoạt động: 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;
?>
Bạn cần phải phân tích cú pháp url trước, vì vậy nó sẽ như thế này:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Nếu bạn cần phân tích cú pháp url thực của trình duyệt hiện tại, bạn cần yêu cầu gọi máy chủ.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
không không bao gồm các #fragment
Lấy dữ liệu sau dấu thăng trong một chuỗi truy vấn rất đơn giản. Đây là một ví dụ được sử dụng khi khách hàng truy cập bảng chú giải thuật ngữ từ một cuốn sách. Nó lấy ký tự liên kết tên được phân phối (#tesla) và đưa khách hàng đến với cụm từ đó và làm nổi bật cụm từ và mô tả của nó bằng màu xanh lam để dễ nhìn.
A. thiết lập các chuỗi của bạn với một id div, vì vậy ký tự liên kết tên sẽ đi đúng chỗ và javascript có thể thay đổi màu 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 đang khởi chạy chức năng java tự động khi trang được tải.
<script>
$( document ).ready(function() {
D. lấy neo (#tesla) từ url mà máy chủ nhận được
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. cắt bớt dấu thăng của nó
myhash1 = myhash1.substr(1) //myhash1 == tesla
F. Tôi cần đánh dấu thuật ngữ và mô tả để tạo một var mới
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G. Bây giờ tôi có thể điều chỉnh 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 ở phía máy khách (xyz.com # tesla) và chuyển ngay đến thuật ngữ. thuật ngữ và mô tả được đánh dấu màu xanh lam bằng javascript để đọc nhanh .. tất cả các mục nhập khác được để lại bằng màu đen ..