धन चिह्न हमेशा रिक्त स्थान नहीं होता है

Moyoutil का URL टूल URI घटकों को बदलता है। decodeURIComponent से डिकोड करने पर + बना रहता है। URLSearchParams application/x-www-form-urlencoded नियमों के अनुसार मूल स्ट्रिंग के + को रिक्त स्थान में बदलता है और फिर प्रतिशत एस्केप डिकोड करता है। इस क्रम के कारण %2B से दर्शाया गया प्लस चिह्न + रहता है।

WHATWG URL: फॉर्म-स्टाइल पार्सिंग

ECMAScript: decodeURIComponent

एक ही इनपुट को दो पथों में निष्पादित करने का परिणाम

यह 5 अक्टूबर, 2026 को प्रोजेक्ट के urlComponent फ़ंक्शन और JavaScript URLSearchParams को चलाने का परिणाम है। तालिका में उद्धरण JSON चिह्न हैं जो रिक्त स्थान को दृश्यमान बनाते हैं, न कि परिणाम में शामिल वर्णों को। क्वेरी पार्सिंग में, हम प्रत्येक इनपुट को q= के साथ उपसर्ग करते हैं।

क्वेरी मान पार्सिंग की तुलना में घटक डिकोडिंग
इनपुटMoyoutil डिकोडिंगURLSearchParams
C++"C++""C "
C%2B%2B"C++""C++"
a+b"a+b""a b"
a%20b"a b""a b"
C++ और C%2B%2B के दो डिकोडिंग मार्ग। q=C++ को क्वेरी की तरह पार्स करने पर C के बाद दो रिक्त स्थान मिलते हैं।
कोड चलाकर प्राप्त परिणामों का स्वयं बनाया गया आरेख। 0x20 रिक्त स्थान और 0x2B प्लस चिह्न का कैरेक्टर कोड है। यह स्क्रीनशॉट नहीं है।

खोज शब्दों को संरक्षित करने के लिए, मूल मानों के साथ क्वेरीज़ बनाएं

यह उदाहरण केवल स्ट्रिंग बनाता है, सर्वर को अनुरोध नहीं भेजता। मूल मान C++ guide को URLSearchParams में देने पर प्लस चिह्न %2B और रिक्त स्थान + बनते हैं। encodeURIComponent उसी रिक्त स्थान को %20 बनाता है। इस उदाहरण में दोनों को क्वेरी की तरह पार्स करने पर मूल मान वापस मिलता है।

const original = "C++ guide";
const query = new URLSearchParams({ q: original }).toString();
// q=C%2B%2B+guide
const component = encodeURIComponent(original);
// C%2B%2B%20guide
new URLSearchParams(query).get("q");
// C++ guide

WHATWG URL: URLSearchParams सीरियलाइज़ेशन

Moyoutil URL टूल में अभी क्वेरी के नाम और मान जोड़ने के इनपुट या फॉर्म-शैली डिकोडिंग मोड नहीं हैं। एक मान जाँचने के लिए C++ guide को एन्कोड करें, परिणाम डिकोड करें और मूल पाठ से तुलना करें। मान बदलने वाले फ़ील्ड में पूरा URL न डालें। वास्तविक API के एन्कोडिंग नियम जाँचें।

यदि आप पहले से एन्कोडेड मान दर्ज करते हैं, तो प्रतिशत चिह्न भी परिवर्तित हो जाएगा।

URLSearchParams के ऑब्जेक्ट रूप में मूल, बिना एन्कोड किए गए मान दें। encodeURIComponent से पहले ही एन्कोड किया गया मान देने पर % फिर से %25 बनता है। नीचे की क्वेरी को एक बार पार्स करने पर C%2B%2B मिलता है, C++ नहीं। बार-बार डिकोड करने से पहले भेजने और प्राप्त करने के चरणों की जाँच करें।

const encoded = encodeURIComponent("C++");
// C%2B%2B
const query = new URLSearchParams({ q: encoded }).toString();
// q=C%252B%252B
new URLSearchParams(query).get("q");
// C%2B%2B

समस्याग्रस्त लिंकों की जाँच का आदेश

  1. मूल खोज शब्द और पारित क्वेरी स्ट्रिंग को एक साथ रखता है। C++ और C%2B%2B के बीच अंतर बताएं।
  2. जांचें कि प्राप्त कोड decodeURIComponent है या फॉर्म-आधारित क्वेरी पार्सर। मोयूटिल के डिकोडिंग परिणाम अकेले सर्वर परिणाम निर्धारित नहीं करते हैं।
  3. मूल मानों के साथ क्वेरी का पुनर्निर्माण करें और पार्सिंग परिणामों के साथ उनकी तुलना करें। उदाहरण कोड और वास्तविक एपीआई नियमों के बीच अंतर करें।

अपूर्ण प्रतिशत अंकन, जैसे % या %2, मोयूटिल में एक त्रुटि है। %FF भी एक त्रुटि है क्योंकि यह मान्य UTF-8 टेक्स्ट नहीं है। इस जाँच का मतलब यह नहीं है कि अन्य पार्सर्स की त्रुटि प्रबंधन समान है, न ही यह मूल पाठ को स्वचालित रूप से पुनर्प्राप्त करने का कार्य है।

अक्सर पूछे जाने वाले प्रश्न

क्या मुझे %20 या + का उपयोग करना चाहिए?

Moyoutil में एक मान एन्कोड करने पर रिक्त स्थान %20 बनता है। URLSearchParams का सीरियलाइज़ेशन + का उपयोग करता है। प्राप्तकर्ता के नियम जाँचें और सुनिश्चित करें कि वापस बदलने पर मूल मान मिलता है।

क्या मैं सभी मूल प्लस चिन्हों को रिक्त स्थान से बदल सकता हूँ?

नहीं। इससे C++ जैसे मानों का अर्थ बदल जाता है। फॉर्म पार्सिंग के नियम केवल उसी प्रारूप में प्राप्त स्ट्रिंग पर लागू करें; बिना एन्कोड किए मूल पाठ को मनमाने ढंग से न बदलें।