2009-06-09 21 views
35

समेत संपूर्ण यूआरएल प्राप्त करें क्या वर्तमान पृष्ठ का अनुरोध करने के लिए पूरे यूआरएल को प्राप्त करने का कोई तरीका है, जिसमें एंकर (# के बाद का पाठ - गलत शब्द का उपयोग कर रहा है), शामिल पृष्ठों में ?क्वेरी स्ट्रिंग और एंकर

यानी पृष्ठ foo.php bar.php में शामिल है। अगर मैं foo.php में आपके समाधान का उपयोग करता हूं, तो मुझे इसे bar.php कहने की ज़रूरत है? Blarg = a # blahblahblah

+0

देखें http://stackoverflow.com/प्रश्न/940905/कैन-पीएचपी-रीड-द-हैश-भाग-ऑफ-द-यूआरएल/940 9 18 –

उत्तर

70

नहीं, मुझे हैश नहीं है, क्योंकि हैश ( सहित #) सर्वर को कभी भी पास नहीं किया जाता है, यह ब्राउज़र की पूरी तरह से एक व्यवहारिक संपत्ति है। $_SERVER['REQUEST_URI'] वैरिएबल में शेष शामिल होंगे।

यदि आपको वास्तव में यह जानने की ज़रूरत है कि हैश क्या है, तो आपको document.location.hash जावास्क्रिप्ट प्रॉपर्टी का उपयोग करना होगा, जिसमें हैश की सामग्री शामिल है (आप इसे किसी रूप में सम्मिलित कर सकते हैं, या इसे सर्वर पर भेज सकते हैं AJAX अनुरोध)।

3

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

+0

क्या आप उस पर विस्तार कर सकते हैं या ऐसा करने पर कुछ संदर्भ जानकारी प्रदान कर सकते हैं? –

5

आप एक जावास्क्रिप्ट ऑनलोड फ़ंक्शन का उपयोग करके एंकर (# के बाद भाग) सहित पूर्ण यूआरएल पास कर सकते हैं जो उस यूआरएल को अजाक्स एंडपॉइंट पर भेजता है।

-5

आप rawurlencode funcion का उपयोग कर एंकर पास कर सकते हैं।

bar.php?blarg=a<?php echo rawurlencode('#blahblahblah')?> 
+0

मुझे लगता है कि आपने इस सवाल को गलत समझा।वह यूआरएल से नामित एंकर पढ़ना चाहता था, आउटपुट के लिए एक को एन्कोड नहीं करता था। –

2

यह उदाहरण इस शो के port या https

function curPageURL() { 
      $pageURL = 'http'; 
      if(isset($_SERVER["HTTPS"])) 
      if ($_SERVER["HTTPS"] == "on") { 
       $pageURL .= "s"; 
      } 
      $pageURL .= "://"; 
      if ($_SERVER["SERVER_PORT"] != "80") { 
       $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; 
      } else { 
       $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
      } 
      return $pageURL; 
     } 

उपयोग के साथ पूर्ण URL अनुरोध: echo curPageURL();

+0

यह प्रश्न के क्रूक्स का जवाब नहीं देता है। # के बाद यूआरएल के हिस्से को वापस कर रहा है – joel

9
// find out the domain: 
$domain = $_SERVER['HTTP_HOST']; 
// find out the path to the current file: 
$path = $_SERVER['SCRIPT_NAME']; 
// find out the QueryString: 
$queryString = $_SERVER['QUERY_STRING']; 
// put it all together: 
$url = "http://" . $domain . $path . "?" . $queryString; 
echo $url; 

// An alternative way is to use REQUEST_URI instead of both 
// SCRIPT_NAME and QUERY_STRING, if you don't need them seperate: 
$url = "http://" . $domain . $_SERVER['REQUEST_URI']; 
echo $url; 
0

यह है

मूल रूप से आप सिर्फ कुछ इस तरह करने की जरूरत है सच है कि आप सर्वर पर हैश डेटा पास नहीं कर सकते हैं। लेकिन कभी-कभी आप जो चाहते हैं उसे सर्वर से '#blablabla' के साथ कुछ यूआरएल मिलता है, जैसे कि जब आप '#' वाले किसी व्यक्ति से लिंक साझा करते हैं, लेकिन साइट को लॉगिन करने की आवश्यकता होती है। नीचे सोचने का एक और तरीका है, शायद विस्तृत नहीं हो सकता है।

पहले, कभी कभी तुम '#' के साथ अपने लिंक साझा करना चाहते हैं, जैसे:

www.so.com#lala 

पहले, आप अपने यूआरएल उपयोग बदलने जावास्क्रिप्ट और के साथ कुछ डेटा पारित कर सकते हैं '?' और इस तरह एक ही समय में '#',:

www.so.com?foo=lala&&flag=hash#lala 

तो, के रूप में '#' सर्वर से पारित nerver, लेकिन आप से $ _GET डेटा [ ''] की तरह प्राप्त कर सकते हैं,:

if($_GET['flag'] === 'hash'){ 

    // base url 
    $_SESSION['url'] = strtok('http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"],"?"); 

    // hash data 
    $_SESSION['hash'] = $_GET['foo']; 
} 

तो, अगर आप ग्राहक को पास करना चाहते हैं '#' डेटा के साथ सब कुछ कर सकते हैं,, आप:

$url = $_SESSION['url']."#".$_SESSION['hash']; 
header("Location:".$url); 
पिछले

, यूआरएल वापस आ गया है

संबंधित मुद्दे