2011-01-20 12 views
61

मैं एक खोज पृष्ठ बना रहा हूं, जहां आप एक खोज क्वेरी टाइप करते हैं और फॉर्म search.php?query=your query पर सबमिट किया गया है। PHP फ़ंक्शन सबसे अच्छा क्या है और मुझे खोज क्वेरी को एन्कोडिंग/डीकोड करने के लिए उपयोग करना चाहिए?PHP में स्ट्रिंग को सही तरीके से एन्कोड करने के लिए URL कैसे करें?

+2

क्या आपको कोई समस्या है? ब्राउज़र और PHP को इसे स्वचालित रूप से पहले से संभालना चाहिए (उदा। टेक्स्ट फ़ील्ड में 'foo bar' डालना, URL में' foo + bar' बनाता है)। –

+0

@ फ़ेलिक्स मैं 'file_get_contents' –

उत्तर

108

यूआरआई क्वेरी के लिए urlencode/urldecode का उपयोग करें; किसी और चीज के लिए rawurlencode/rawurldecode का उपयोग करें।

urlencode और rawurlencode के बीच अंतर यह है कि

  • urlencodeapplication/x-www-form-urlencoded के अनुसार encodes (अंतरिक्ष + साथ इनकोडिंग), जबकि
  • rawurlencode सादा Percent-Encoding (अंतरिक्ष के अनुसार के साथ इनकोडिंग encodes है %20)।
+0

* एप्लिकेशन/एक्स-www-form-urlencoded * केवल एक विशेष रूप है * प्रतिशत-एन्कोडिंग * और केवल HTML फॉर्म डेटा एन्कोड करने के लिए लागू होता है। – Gumbo

+0

कौन सा एन्कोडिंग बेहतर है, फॉर्म-urlencoded या प्रतिशत? –

+1

@ क्लिक करें उपरोक्त: उनकी तुलना इस तरह से नहीं की जा सकती है। * एप्लिकेशन/एक्स-www-form-urlencoded * प्रारूप * * * प्रतिशत-एन्कोडिंग * प्रारूप है, सिवाय इसके कि अंतरिक्ष '% 20' के बजाय' + 'के साथ एन्कोड किया गया है। और इसके अलावा, * एप्लिकेशन/एक्स-www-form-urlencoded * का उपयोग फॉर्म डेटा को एन्कोड करने के लिए किया जाता है जबकि * प्रतिशत-एन्कोडिंग * का अधिक सामान्य उपयोग होता है। – Gumbo

14

चालाकी से नामित urlencode() और urldecode()

हालांकि, आपको और $_GET में दिखाई देने वाले चर पर urldecode() का उपयोग करने की आवश्यकता नहीं है।

+3

का उपयोग कर खोजकर्ता स्क्रिप्ट को कॉल करने जा रहा हूं। चालाकी से नामित' rawurlencode' और 'rawurldecode' ... –

2

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

उपयोग मामले वर्णन

किसी ने बस हमारी वेबसाइट पर एक प्रीपेड उपहार कार्ड ("टोकन") खरीदा है। टोकन के पास उन्हें रिडीम करने के लिए संबंधित यूआरएल हैं। यह ग्राहक किसी और को ईमेल करना चाहता है। हमारे वेब पेज में mailto लिंक शामिल है जो उन्हें ऐसा करने देता है।

PHP कोड

// The order system generates some opaque token 
$token = 'w%a&!e#"^2(^@azW'; 

// Here is a URL to redeem that token 
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token); 

// Actual contents we want for the email 
$subject = 'I just bought this for you'; 
$body = 'I just bought a widget for you. Please enter your shipping details here: ' . $redeemUrl; 

// A URI for the email as prescribed 
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body); 

// Print an HTML element that links to that page 
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>'; 

ध्यान दें: ऊपर समझती है कि आप एक text/html दस्तावेज़ में outputting रहे हैं। यदि आपका आउटपुट मीडिया प्रकार text/json है तो बस $retval['url'] = $mailToUri; का उपयोग करें क्योंकि आउटपुट एन्कोडिंग json_encode() द्वारा प्रबंधित की जाती है।

टेस्ट मामले

  1. एक PHP परीक्षण स्थल पर कोड चलाने
  2. ईमेल भेजें लिंक
  3. क्लिक करें (वहाँ एक विहित एक मैं यहाँ उल्लेख करना चाहिए है?)
  4. ईमेल प्राप्त करें
  5. उस लिंक पर क्लिक करें

आप देखना चाहिए:

"args": { 
    "token": "w%a&!e#\"^2(^@azW" 
}, 

और निश्चित रूप से यह ऊपर $token की JSON प्रतिनिधित्व है।

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