URL को PHP में ठीक से एनकोड कैसे करें?


97

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


2
क्या आप किसी समस्या का अनुभव करते हैं? ब्राउज़रों और PHP को इसे पहले से ही संभाल लेना चाहिए (जैसे foo barकि टेक्स्ट फ़ील्ड में डालना , foo+barURL में बनाना)।
फेलिक्स क्लिंग

@ फेलिक्स मैं खोजकर्ता स्क्रिप्ट का उपयोग करके कॉल करने जा रहा हूंfile_get_contents
क्लिक करें अपवोट

जवाबों:


183

URI क्वेरी के उपयोग के लिए urlencode/ urldecode; कुछ और उपयोग के लिए rawurlencode/ rawurldecode

के बीच का अंतर है urlencodeऔर rawurlencodeवह है


एप्लिकेशन / x-www-form-urlencoded Percent-Encoding का एक विशेष संस्करण है और केवल HTML फॉर्म डेटा को एनकोड करने के लिए लागू किया जाता है।
गंबूबो

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

12
rawurlencode () javascript decodeURI () फ़ंक्शन के साथ संगत है
क्लाइव पैटरसन

क्या यह नियम हमेशा अनुभवजन्य है? मेरा मतलब है, जब मुझे एक क्वेरी स्ट्रिंग का उपयोग करने की आवश्यकता होती है जो मैं हमेशा उपयोग करता हूं urldecode। फिर, यूआरआई पथ (जैसे /a/path with spaces/) और यूआरआई टुकड़ा (जैसे #fragment) के बारे में क्या । क्या मुझे हमेशा rawurldecodeइन दोनों का उपयोग करना चाहिए ?
टोनिक्स

अंगूठे का एक अच्छा नियम यह है कि पथ के लिए (जैसे / मेरा% 20folder /) साथ जाएं rawurlencode; लेकिन POST और GET फील्ड्स के लिए जाना urlencode(लाइक /? फोल्डर =
माय

22

Cunningly नाम urlencode () और urldecode ()

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


4
क्या आप विस्तृत कर सकते हैं कि $ _POST के साथ urld timecode () का उपयोग क्यों नहीं किया जाना चाहिए। क्योंकि मैं किसी भी समस्या के बिना उम्र के बाद से कर रहा हूँ।
सिड

क्या मुझे "name=b&age=c&location=d"AJAX के माध्यम से पीएचपी फ़ाइल में भेजे गए बुनियादी मापदंडों (जैसे ) को एनकोड करने की आवश्यकता है ?
ओल्डबॉय

9

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

केस विवरण का उपयोग करें

हमारी वेबसाइट पर किसी ने सिर्फ एक प्रीपेड गिफ्ट कार्ड ("टोकन") खरीदा है। टोकन के पास उन्हें भुनाने के लिए संबंधित URL होते हैं। यह ग्राहक URL को किसी और को ईमेल करना चाहता है। हमारे वेब पेज में एक 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 = '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 with that mailto link
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';

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

परीक्षण का मामला

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

तुम्हे देखना चाहिए:

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

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


समान रूप से, और कम शब्दार्थ (क्योंकि mailto:HTTP नहीं है), आप उपयोग कर सकते हैं $mailToUri 'mailto:?' . http_build_query(['subject'=>$subject, 'body'=>$body], null, '&', PHP_QUERY_RFC3986);
विलियम एंट्रीकेन

0

आप URL एनकोडिंग कार्य का उपयोग कर सकते हैं PHP के पास है

rawurlencode() 

समारोह

एएसपी के पास है

Server.URLEncode() 

समारोह

जावास्क्रिप्ट में आप इसका उपयोग कर सकते हैं

encodeURIComponent() 

समारोह।


0

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

/**
 * UrlEncoder make it easy to encode your URL
 */
class UrlEncoder{
    public const STANDARD_RFC1738 = 1;
    public const STANDARD_RFC3986 = 2;
    public const STANDARD_CUSTOM_RFC3986_ISH = 3;
    // add more here

    static function encode($string, $rfc){
        switch ($rfc) {
            case self::STANDARD_RFC1738:
                return  urlencode($string);
                break;
            case self::STANDARD_RFC3986:
                return rawurlencode($string);
                break;
            case self::STANDARD_CUSTOM_RFC3986_ISH:
                // Add your custom encoding
                $entities = ['%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D'];
                $replacements = ['!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]"];
                return str_replace($entities, $replacements, urlencode($string));
                break;
            default:
                throw new Exception("Invalid RFC encoder - See class const for reference");
                break;
        }
    }
}

उदाहरण का उपयोग करें:

$dataString = "https://www.google.pl/search?q=PHP is **great**!&id=123&css=#kolo&email=me@liszka.com)";

$dataStringUrlEncodedRFC1738 = UrlEncoder::encode($dataString, UrlEncoder::STANDARD_RFC1738);
$dataStringUrlEncodedRFC3986 = UrlEncoder::encode($dataString, UrlEncoder::STANDARD_RFC3986);
$dataStringUrlEncodedCutom = UrlEncoder::encode($dataString, UrlEncoder::STANDARD_CUSTOM_RFC3986_ISH);

उत्पादन होगा:

string(126) "https%3A%2F%2Fwww.google.pl%2Fsearch%3Fq%3DPHP+is+%2A%2Agreat%2A%2A%21%26id%3D123%26css%3D%23kolo%26email%3Dme%40liszka.com%29"
string(130) "https%3A%2F%2Fwww.google.pl%2Fsearch%3Fq%3DPHP%20is%20%2A%2Agreat%2A%2A%21%26id%3D123%26css%3D%23kolo%26email%3Dme%40liszka.com%29"
string(86)  "https://www.google.pl/search?q=PHP+is+**great**!&id=123&css=#kolo&email=me@liszka.com)"

* RFC मानकों के बारे में अधिक जानकारी प्राप्त करें : https://datatracker.ietf.org/doc/rfc3986/ और urlencode बनाम rawurlencode?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.