सवाल PHP में एक यूआरएल से खंड (हैश '# के बाद मान) प्राप्त करें


मैं php में किसी URL से खंड (हैश '# के बाद मान) कैसे प्राप्त कर सकता हूं?

से कहो http://domain.com/site/gallery/1#photo45 मुझे चाहिए photo45


76
2018-02-23 11:03


मूल


@ile en.wikipedia.org/wiki/Hash_symbol - Pekka 웃
डुप्लिकेट या कम से कम उसी लाइन पर stackoverflow.com/questions/1957030/..., stackoverflow.com/questions/1162008/... तथा stackoverflow.com/questions/2181290/... - Gordon
के संभावित डुप्लिकेट "Somepage.php # name" में हैश के बाद मान कैसे प्राप्त करें? - PhoneixS


जवाब:


यदि आप उपयोगकर्ता के ब्राउज़र में दिखाए गए हैश चिह्न या एंकर के बाद मान प्राप्त करना चाहते हैं: यह "मानक" HTTP के साथ संभव नहीं है क्योंकि यह मान सर्वर पर कभी नहीं भेजा जाता है (इसलिए यह उपलब्ध नहीं होगा $_SERVER["REQUEST_URI"] या समान पूर्वनिर्धारित चर)। आपको क्लाइंट साइड पर कुछ प्रकार के जावास्क्रिप्ट जादू की आवश्यकता होगी, उदा। POST पैरामीटर के रूप में इस मान को शामिल करने के लिए।

अगर यह केवल किसी भी स्रोत से ज्ञात यूआरएल को पार्स करने के बारे में है, तो mck89 द्वारा जवाब हालांकि पूरी तरह से ठीक है।


97
2018-02-23 11:05



alert(window.location.hash); - sfussenegger
सिर्फ एक नोट: window.location.hash आपको पूरा टुकड़ा शामिल करता है # [हैश] साइन ... और यह ज़ाहिर है, जावास्क्रिप्ट में :) - jave.web
बीटीडब्ल्यू: जावास्क्रिप्ट जादू: डी: डी: डी: डी: डी ...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'] .... जादू! - jave.web
हैशमार्क के बाद मूल्य सर्वर पक्ष से प्राप्त किया जा सकता है। मैं नीचे एक समाधान दिखाता हूं। - JamesAD-0


उस भाग को "खंड" कहा जाता है और आप इसे इस तरह से प्राप्त कर सकते हैं:

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

36
2018-02-23 11:05



यह बहुत अच्छा है लेकिन अगर आप `` `$ fragment = isset ($ url ['fragment'] जोड़ना चाहते हैं तो यह किसी भी त्रुटि के बिना होता?) '#'। $ यूआरएल ['खंड']: ''; `` `लेकिन अभी भी अंगूठे ऊपर !! - John Max
यह एक स्ट्रिंग के अंदर सहेजे गए यूआरएल के लिए काम करता है जो ब्राउजर एड्रेस बार से वास्तविक यूआरएल नहीं है - Muhammad Omer Aslam


ए) पहले से ही PHP में # हैश के साथ यूआरएल है? आसान! बस इसे पार्स!

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]; 

बी) आप PHP में एक फॉर्म भेजकर #hash प्राप्त करना चाहते हैं?
=> कुछ जावास्क्रिप्ट मैजिक का प्रयोग करें! (फॉर्म को प्री-प्रोसेस करने के लिए)

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 जावास्क्रिप्ट में जो बस उस तरह से काम करता है :))

सी) आप PHP में #hash प्राप्त करना चाहते हैं बस अनुरोधित यूआरएल से?

आप नहीं कर सकते!

... (नियमित HTTP अनुरोधों पर विचार करते समय) ...

... उम्मीद है कि यह मदद की :)


24
2017-12-09 01:48





मैं इसके लिए थोड़ा सा कामकाज खोज रहा हूं - और केवल एक चीज जो मैंने पाया है वह "एंकर" पढ़ने के लिए यूआरएल रीराइट्स का उपयोग करना है। मैंने यहां अपाचे दस्तावेज़ों में पाया http://httpd.apache.org/docs/2.2/rewrite/advanced.html निम्नलिखित...

डिफ़ॉल्ट रूप से, एक HTML एंकर पर रीडायरेक्ट करना काम नहीं करता है, क्योंकि mod_rewrite # वर्ण से बचता है, इसे% 23 में बदल देता है।   यह बदले में, पुनर्निर्देशन तोड़ता है।

समाधान: RewriteRule पर [NE] ध्वज का उपयोग करें। एनई के लिए खड़ा है   पलायन।

चर्चा: यह तकनीक निश्चित रूप से अन्य विशेष के साथ भी काम करेगी   अक्षर जो mod_rewrite, डिफ़ॉल्ट रूप से, यूआरएल-एन्कोड्स।

इसमें अन्य चेतावनी हो सकती हैं और क्या नहीं ... लेकिन मुझे लगता है कि कम से कम सर्वर पर # के साथ कुछ करना संभव है।


8
2017-11-21 19:48





आप के बाद पाठ नहीं मिल सकता है हैश मार्क। यह अनुरोध में सर्वर को नहीं भेजा जाता है।


3
2018-02-23 11:05





मुझे यह चाल मिली, अगर आप जोर देते हैं कि PHP के साथ मूल्य चाहिए .. एंकर (#) मान को विभाजित करें और इसे जावास्क्रिप्ट से प्राप्त करें, फिर कुकी के रूप में स्टोर करें, उसके बाद कुकी मूल्य को php ~

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


3
2017-12-14 03:31





आप क्लाइंट साइड पर सर्वर स्ट्रिंग को स्ट्रिंग कर सकते हैं। विशेष रूप से मजबूत समाधान नहीं, लेकिन यदि आप मेरे जैसे त्वरित समाधान नहीं चाहते हैं तो मुझे लगता है कि यह पर्याप्त होगा।

ग्राहक:

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

सर्वर:

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

0
2017-12-13 22:51