2010-07-22 16 views
6

का एक विशिष्ट भाग बदलना मैं क्वेरी स्टिंग प्राप्त करने के लिए $_SERVER['QUERY_STRING'] का उपयोग करता हूं।क्वेरी स्ट्रिंग प्राप्त करने के लिए क्वेरी स्ट्रिंग PHP

एक उदाहरण a=123&b=456&c=789

होगा मैं कैसे a=123&c=789 जहां ख किसी भी लम्बाई के किसी भी मूल्य हो सकता है और अल्फा न्यूमेरिक है कर सकते हैं प्राप्त करने के लिए क्वेरी स्ट्रिंग से ख मान निकालें सकता है।

किसी भी विचार की सराहना की, धन्यवाद।

+0

SO रॉक लेकिन आप नहीं हैं। क्योंकि आपने एक समाधान स्वीकार कर लिया है जो कई प्रकार के डेटा को प्रतिस्थापित करने में विफल रहेगा। –

+0

@ कोल। श्रापनेल: समाधान किस प्रकार का डेटा प्रतिस्थापित करने में सक्षम नहीं होगा? ओपी तब उस मामले में दिलचस्पी ले सकता है जहां क्वेरी पैरामीटर में केवल संख्याएं होती हैं (जैसा कि उदाहरण क्वेरी में रिपोर्ट किया गया है); यदि यह मामला है, प्रस्तावित समाधान काम करेगा। – kiamlaluno

+0

@kiamlaluno अच्छी तरह से अगर आप इस साइट को "चलो हर लंगड़ा सवाल का जवाब दें और इसे भूल जाएं" यह ओ.के. है। लेकिन कोई इस साइट को ज्ञान के एक अंतिम स्रोत के रूप में सोचता है, जहां उत्तर –

उत्तर

5

मूल्य है $_GET['b'] होने जा रहा है।

कैसे के बारे में:

str_replace('&b='.$_GET['b'], '', $_SERVER['QUERY_STRING']); 
+0

मुझे यह पसंद है। धन्यवाद। – pondpad

+0

यह समाधान विफल रहता है यदि मान में ऐसे अक्षर हैं जिन्हें एन्कोड करने की आवश्यकता है। उदाहरण के लिए टिप्पणियों में कर्नल श्रापनेल की टिप्पणी देखें (उदाहरण के लिए http://stackoverflow.com/questions/3308711#comment-3428781 देखें)। – Gumbo

+0

आह, हाँ। लेकिन आप एक डीकोड चीज़ में $ _GET ['b'] को लपेटकर इतना आसान कर सकते हैं। – Rimian

1

आप बस $_GET का उपयोग कर एक चर बनाने के लिए और बाहर निकालने के निर्माण प्रक्रिया में b स्ट्रिंग:

$query_string_new = 'a=' . urlencode($_GET['a']) . '&c=' . urlencode($_GET['c']); 

अब $query_string_new शामिल करना चाहिए a=123&c=789

+1

आउटपुट से ठीक से बचने के लिए मत भूलना। – Gumbo

+0

@ गंबो: निश्चित रूप से अपडेट किया गया, धन्यवाद। – Sarfraz

+0

और क्या होगा यदि * ए * और * सी * दशमलव मान नहीं हैं? – Gumbo

3

इस प्रयास करें:

$query_new = preg_replace('/(^|&)b=[^&]*/', '', $query); 
+1

नीचे वोट का कारण क्या है? और कृपया मत कहो "ओह, आप नियमित अभिव्यक्तियों का उपयोग कर रहे हैं! कितना बुरा! " – Gumbo

+0

एक नियमित अभिव्यक्ति का उपयोग पैरामीटर को प्रतिस्थापित करने की अनुमति देगा जो क्वेरी स्ट्रिंग में जो भी स्थिति है। 'str_replace ('& b ='। $ _ प्राप्त करें ['बी'], '', $ _SERVER ['QUERY_STRING']) 'अगर यह क्वेरी स्ट्रिंग में पहला पैरामीटर है तो इसे प्रतिस्थापित नहीं करता है। – kiamlaluno

+0

@kiamlaluno: बिल्कुल। यही कारण है कि मैंने एक नियमित अभिव्यक्ति खोज चुना है। – Gumbo

13

एक समाधान यूआरएल पार्स का उपयोग कर:

parse_str($_SERVER['QUERY_STRING'], $result_array); 
unset($result_array['b']); 
$_SERVER['QUERY_STRING'] = http_build_query($result_array); 
+0

कुछ ऐसा, निश्चित रूप से। आप शुरुआती 'parse_str()': 'अनसेट ($ _ GET [' b '] करने के बजाय मौजूदा '$ _GET' का उपयोग करने में सक्षम हो सकते हैं; $ qs = http_build_query ($ _ GET); ' –

+0

अंतर यह है कि मेरा उत्तर केवल' $ _SERVER ['QUERY_STRING'] 'चर को प्रभावित करता है, और $ _GET को बिना छेड़छाड़ करता है, अगर किसी कारण से इसकी आवश्यकता हो। – SirDarius

2

सभी उत्तरों अच्छे लग रहे हैं, लेकिन यह अधिक लचीला यदि आप ऐसा हो जाएगा:

// Make a copy of $_GET to keep the original data 
$getCopy = $_GET; 
unset($getCopy['b']); // or whatever var you want to take out 

// This is your cleaned array 
var_dump($getCopy); 

// If you need the URL-encoded string, just use http_build_query() 
$encodedString = http_build_query($getCopy); 
+0

PHP 5.3 '$ getCopy = $ _GET' में एक प्रतिलिपि नहीं बनाती है, लेकिन यह' $ _GET' का संदर्भ बनाता है। मुझे अपने कोड में एक ही समस्या थी, जहां मैं '_ _GET' के मान को संरक्षित करना चाहता था जिसका उपयोग किसी अन्य फ़ंक्शन के लिए किया गया था; मैंने '$ query = $ _GET का उपयोग किया; अनसेट ($ क्वेरी ['q']; ', और परिणाम यह भी हुआ है कि अन्य फ़ंक्शन (जो' $ _GET' सीधे एक्सेस कर रहा था) '$ _GET ['q'] ' – kiamlaluno

+0

पुनर्प्राप्त करने में सक्षम नहीं था जैसा कि मुझे पता है, एक संदर्भ बनाने के लिए आपको '$ getCopy = & $ _GET' करना होगा ... – eillarra

+0

@ilarra: यह सही है; PHP 5.3 में संदर्भ द्वारा केवल ऑब्जेक्ट पास किए जाते हैं। मैं तब कोड को सामान्यीकृत नहीं कर सकता , भले ही '$ query = $ _GET; अनसेट ($ क्वेरी ['q'] को बदल दिया गया हो; 'लूप के साथ मेरे कोड में मौजूद समस्या का समाधान हुआ। – kiamlaluno

1

आप इस फ़ंक्शन का उपयोग कर सकते हैं:

function Remove_QS_Key($url, $key) { 
$url = preg_replace('/(?:&|(\?))'.$key.'=[^&]*(?(1)&|)?/i', "$1", $url); 
return $url; 
} 

अपनी इच्छित कुंजी को हटाने के लिए, उदा।

echo Remove_QS_Key("http://domain.com/?a=b&ref=dusername&c=d&e=f&g=h", "ref"); 

परिणाम

http://www.domain.com/?a=b&c=d&e=f&g=h 
+0

क्या यह स्वीकृत उत्तर से बेहतर है? – Oren

0

नाशपाती पहले से ही एक वर्ग (Net_URL2) उस URL को पार्स/निर्माण संभालती है:

संगीतकार के माध्यम से स्थापित करें: https://packagist.org/packages/pear/net_url2 शामिल के रूप में स्थापित करें: https://github.com/pear/Net_URL2/blob/master/Net/URL2.php

उदाहरण कोड:

$url = new Net_URL2('http://www.example.com/?one=1'); 
$url->setQueryVariable('two', 2); 
echo $url; // http://www.example.com/?one=1&two=2 
संबंधित मुद्दे