मैं PHP का उपयोग करके अपने URL में '#' प्रतीक के बाद के टुकड़े का चयन कैसे कर सकता हूं?
परिणाम जो मुझे चाहिए "फोटो 45" है।
यह एक उदाहरण URL है:
http://example.com/site/gallery/1#photo45
मैं PHP का उपयोग करके अपने URL में '#' प्रतीक के बाद के टुकड़े का चयन कैसे कर सकता हूं?
परिणाम जो मुझे चाहिए "फोटो 45" है।
यह एक उदाहरण URL है:
http://example.com/site/gallery/1#photo45
जवाबों:
यदि आप उपयोगकर्ता के ब्राउज़र में दिखाए गए हैश मार्क या एंकर के बाद मान प्राप्त करना चाहते हैं: यह "मानक" HTTP के साथ संभव नहीं है क्योंकि यह मान सर्वर पर कभी नहीं भेजा जाता है (इसलिए यह $_SERVER["REQUEST_URI"]
या इसी तरह उपलब्ध नहीं होगा। पूर्वनिर्धारित चर)। क्लाइंट मान पर आपको कुछ प्रकार के जावास्क्रिप्ट जादू की आवश्यकता होगी, जैसे कि इस मूल्य को एक POST पैरामीटर के रूप में शामिल करना।
यदि यह केवल किसी भी स्रोत से किसी ज्ञात URL को पार्स करने के बारे में है, तो mck89 द्वारा उत्तर हालांकि पूरी तरह से ठीक है।
alert(window.location.hash);
window.location.hash
आप #
[हैश] साइन
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); });
आपके फॉर्म की "विधि" के आधार पर आपको हैश मिलता है $_POST['fragment']
या $_GET['fragment']
.... MAGIC!
उस हिस्से को "टुकड़ा" कहा जाता है और आप इसे इस तरह से प्राप्त कर सकते हैं:
$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
या "पुराने" PHP में आपको सरणी तक पहुंचने के लिए विस्फोट को पूर्व-स्टोर करना होगा:
$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
});
अपने पर निर्भर करता है form
की method
विशेषता द्वारा PHP में इस हैश मिलती है:
$_GET['fragment']
या$_POST['fragment']
संभावित रिटर्न: 1. ""
[खाली स्ट्रिंग] (कोई हैश नहीं) 2. पूरे हैश को #
[हैश] साइन (क्योंकि हमने window.location.hash
जावास्क्रिप्ट में इस्तेमाल किया है जो इस तरह से काम करता है :))
... (नियमित HTTP अनुरोधों पर विचार करते समय नहीं) ...
... आशा है कि यह मदद की :)
मैं इसके लिए एक बिट के लिए वर्कअराउंड खोज रहा हूं - और केवल एक चीज जो मुझे मिली है वह है "एंकर" पढ़ने के लिए URL रीराइट्स का उपयोग करना। मुझे यहाँ अपाचे डॉक्स में http://httpd.apache.org/docs/2.2/rewrite/advanced.html निम्नलिखित मिला ...
डिफ़ॉल्ट रूप से, HTML एंकर के लिए पुनर्निर्देशन काम नहीं करता है, क्योंकि mod_rewrite # वर्ण से बच जाता है, इसे% 23 में बदल देता है। यह, बदले में, पुनर्निर्देशन को तोड़ता है।
समाधान: रिवेराइट पर [NE] ध्वज का उपयोग करें। NE नो एस्केप के लिए खड़ा है।
चर्चा: यह तकनीक निश्चित रूप से अन्य विशेष वर्णों के साथ भी काम करेगी जो mod_rewrite, डिफ़ॉल्ट रूप से, URL- एन्कोड करते हैं।
इसके अन्य कारण हो सकते हैं और क्या नहीं ... लेकिन मुझे लगता है कि सर्वर पर # के साथ कम से कम कुछ करना संभव है।
आपको हैश मार्क के बाद टेक्स्ट नहीं मिल सकता है । यह अनुरोध में सर्वर को नहीं भेजा जाता है।
मुझे यह तरकीब तब लगी जब आप आग्रह करते हैं कि PHP के साथ मान चाहिए। लंगर ( #
) मूल्य को विभाजित करें और इसे जावास्क्रिप्ट के साथ प्राप्त करें, फिर कुकी के रूप में संग्रहीत करें, उसके बाद PHP के साथ कुकी मूल्य प्राप्त करें
आप इसे जावास्क्रिप्ट और php के संयोजन से कर सकते हैं:
<div id="cont"></div>
और दूसरी तरफ से;
<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>
फिर, फॉर्म सबमिट करने पर आप $ _POST ['हैश'] के माध्यम से मान प्राप्त कर सकते हैं (फॉर्म सेट करें)
यदि आप URL से हैश को गतिशील रूप से पकड़ना चाहते हैं, तो यह काम करना चाहिए: 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;
?>
आपको पहले url को पार्स करने की आवश्यकता है, इसलिए यह इस प्रकार है:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
यदि आपको वर्तमान ब्राउज़र के वास्तविक यूआरएल को पार्स करने की आवश्यकता है, तो आपको सर्वर को कॉल करने के लिए अनुरोध करना होगा।
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
करता नहीं #fragment शामिल
क्वेरी स्ट्रिंग में हैशमार्क के बाद डेटा प्राप्त करना सरल है। यहां एक उदाहरण का उपयोग किया जाता है जब कोई ग्राहक किसी पुस्तक की शब्दावली का उपयोग करता है। यह नाम दिया गया लंगर (#tesla) लेता है, और ग्राहक को उस शब्द तक पहुँचाता है और शब्द और उसके विवरण को नीले रंग में हाइलाइट करता है ताकि उसे देखने में आसानी हो।
A. अपनी स्ट्रिंग्स को div id के साथ सेट करें, इसलिए नाम लंगर चला जाता है जहां इसकी माना जाता है और जावास्क्रिप्ट पाठ के रंगों को बदल सकता है
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. जावास्क्रिप्ट का उपयोग करें भारी काम करने के लिए, सर्वर की ओर, अपने PHP पेज में, या जहाँ भी डाला जाए।
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. मैं पेज लोड होने पर जावा फ़ंक्शन को स्वचालित रूप से लॉन्च कर रहा हूं।
<script>
$( document ).ready(function() {
डी। सर्वर द्वारा प्राप्त यूआरएल से लंगर (#tesla) प्राप्त करें
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
ई। हैश साइन ऑफ को ट्रिम करें
myhash1 = myhash1.substr(1) //myhash1 == tesla
एफ। मुझे शब्द और विवरण पर प्रकाश डालने की आवश्यकता है इसलिए मैं एक नया संस्करण बनाता हूं
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
जी। अब मैं शब्द और विवरण के लिए पाठ रंग में हेरफेर कर सकता हूं
var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>
एच। यह काम करता है। क्लाइंट क्लाइंट साइड पर लिंक पर क्लिक करता है (xyz.com # tesla) और शब्द के दाईं ओर जाता है। शब्द और विवरण को त्वरित पढ़ने के लिए जावास्क्रिप्ट द्वारा नीले रंग में हाइलाइट किया गया है .. अन्य सभी प्रविष्टियों को काले रंग में छोड़ दिया गया है।