php

2010-02-23 15 views
68

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

कहो http://domain.com/site/gallery/1#photo45 से मैं चाहता हूँ photo45

+1

@ile http://en.wikipedia.org/wiki/Hash_symbol –

+1

डुप्लिकेट या कम से कम उसी पर http://stackoverflow.com/questions/1957030/retrieve-the-hash-in-the-url-with-php के रूप में लाइनें, http://stackoverflow.com/questions/1162008/php-hash-fragment-portion- ऑफ-यूआरएल और http://stackoverflow.com/questions/2181290/php-zend-framework-how-to-get-request-uri-fragment-from-request-object – Gordon

+1

संभावित डुप्लिकेट [मूल्य के बाद मूल्य कैसे प्राप्त करें "somepage.php # name" में हैश ?? (http://stackoverflow.com/questions/1917762/how-to-get-the-value-after-the-hash-in-somepage-phpname) – PhoneixS

उत्तर

92

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

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

+29

'अलर्ट (window.location.hash);' – sfussenegger

+2

बस एक नोट: 'window.location.hash' आपको' # '[हैश] चिह्न सहित पूरा टुकड़ा मिल जाता है ... और यह निश्चित रूप से जावास्क्रिप्ट में है :) –

+1

बीटीडब्ल्यू: जावास्क्रिप्ट जादू: डी: डी: डी: डी: डी ... 'var form = document.getElementsByTagName ('form'); के लिए (var i = 0; i

3

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

35

हिस्सा "टुकड़ा" कहा जाता है और आप इस तरह से प्राप्त कर सकते हैं कि:

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

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

3

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

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

7

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

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

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

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

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

20

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

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

या में "पुराने" पीएचपी आप पहले से स्टोर चाहिए विस्फोट का उपयोग करने की सरणी:

$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 का उपयोग किया है जो कि इस तरह से काम करता है :))

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

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

... (नियमित HTTP अनुरोध नहीं ध्यान में रखता है) ...

... आशा इस :)

0

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

ग्राहक:

सर्वर:

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

एक क्वेरी स्ट्रिंग में hashmark के बाद डेटा प्राप्त करना सरल है। यहां एक उदाहरण दिया गया है जब कोई ग्राहक किसी पुस्तक से शब्दों की शब्दावली का उपयोग करता है। यह नाम एंकर वितरित (#tesla) लेता है, और क्लाइंट को उस शब्द तक पहुंचाता है और शब्द और उसके विवरण को नीले रंग में हाइलाइट करता है ताकि इसे देखना आसान हो।

ए सेटअप एक div id के साथ अपने तार, इसलिए नाम लंगर जहां के लिए अपनी चाहिए और जावास्क्रिप्ट, भारी काम करने के लिए पाठ रंग जावास्क्रिप्ट

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

बी उपयोग बदल सकते हैं पर चला जाता है सर्वर साइड, अपने PHP पृष्ठ, या जहाँ भी में डाला ..

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

सी मैं स्वचालित रूप से, जब पेज लोड जावा समारोह की शुरूआत कर रहा हूँ।

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

डी।सर्वर

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

ई द्वारा प्राप्त यूआरएल से लंगर (#tesla) मिलता है इसके बारे में

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

एफ बंद हैश संकेत ट्रिम मैं अवधि और विवरण तो मैं उजागर करने की जरूरत है एक नए वर बनाने

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

जी अब मैं अवधि और विवरण

के लिए पाठ रंग में हेरफेर कर सकते हैं

एच। यह काम करता है। ग्राहक क्लिक क्लाइंट साइड (xyz.com # टेस्ला) पर लिंक करता है और इस शब्द के लिए सही हो जाता है। शब्द और विवरण को त्वरित पढ़ने के लिए जावास्क्रिप्ट द्वारा नीले रंग में हाइलाइट किया गया है .. सभी अन्य प्रविष्टियां काले रंग में बनी हैं ..

+1

यह उत्तर केवल खंड के क्लाइंट-साइड हैंडलिंग के साथ ही व्यवहार करता है, जबकि प्रश्न सर्वर-साइड (PHP के साथ) के बारे में है। –

+0

क्लाइंट साइड सेटअप के साथ ठीक से सेटअप करता है, तो सर्वर पक्ष PHP के साथ आसान है। –