Swift encode URL: 5 घातक गलतियाँ और उनसे कैसे बचें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift encode URL: आपका कोड किरिलिचा और स्पेस पर क्यों टूटता है

\n\n

हर डेवलपर जिसने कभी Swift पर नेटवर्क अनुरोध भेजा है, इस दर्द का सामना किया है: आप URL बनाते हैं, पैरामीटर जोड़ते हैं, और सर्वर 400 त्रुटि लौटाता है या, इससे भी बुरा, चुपचाप अनुरोध को अनदेखा कर देता है। परिचित लगता है? अक्सर समस्या URL के गलत एनकोडिंग में होती है। लगता है कि यह कितना आसान हो सकता है - एक स्ट्रिंग लें, स्पेस को %20 से बदलें, और हो गया। लेकिन Swift (किसी भी सख्त भाषा की तरह) लापरवाही माफ नहीं करता।

\n\n

इस लेख में, हम Swift encode URL में 5 सबसे आम गलतियों पर चर्चा करेंगे, जो Stack Overflow पर हज़ारों व्यूज बटोरती हैं। आप सीखेंगे कि उनसे कैसे बचें और ऐसा विश्वसनीय कोड लिखें जो किसी भी डेटा के साथ काम करे - अंग्रेज़ी अक्षरों से लेकर जटिल किरिलिचा और विशेष वर्णों तक।

\n\n

गलती #1: गलत कैरेक्टर सेट के साथ addingPercentEncoding का उपयोग करना

\n\n

यह शायद सबसे लोकप्रिय जाल है। कई नौसिखिए addingPercentEncoding(withAllowedCharacters:) मेथड को देखते हैं और सोचते हैं: "ओह, यह तो परफेक्ट है!"। लेकिन वे पूरे URL के लिए इसमें .urlHostAllowed या .urlPathAllowed पास कर देते हैं। परिणाम - क्रैश या गलत अनुरोध।

\n\n

यह काम क्यों नहीं करता?

\n\n

URL का प्रत्येक भाग (स्कीम, होस्ट, पथ, query-पैरामीटर) का अपना अनुमत कैरेक्टर सेट होता है। यदि आप पूरे URL को होस्ट के रूप में एनकोड करते हैं, तो आप स्लैश और कोलन खो देंगे। यदि पथ के रूप में, तो query-स्ट्रिंग टूट जाएगी।

\n\n
// ❌ गलती: पूरे URL को होस्ट के रूप में एनकोड करना\nlet urlString = "https://example.com/पथ?name=इवान & उपनाम=पेत्रोव"\nlet encoded = urlString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)\n// परिणाम: "https%3A%2F%2Fexample.com%2F%D0%BF%D1%83%D1%82%D1%8C%3Fname%3D%D0%98%D0%B2%D0%B0%D0%BD%20%26%20%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F%3D%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2"\n// सर्वर ऐसे URL को नहीं समझेगा\n
\n\n

सुनहरा नियम याद रखें: URL के प्रत्येक भाग को अलग-अलग एनकोड करें या URLComponents का उपयोग करें।

\n\n

सही तरीका: URLComponents

\n\n
// ✅ सही: URLComponents का उपयोग करना\nvar components = URLComponents()\ncomponents.scheme = "https"\ncomponents.host = "example.com"\ncomponents.path = "/पथ"\ncomponents.queryItems = [\n    URLQueryItem(name: "name", value: "इवान & पेत्रोव"),\n    URLQueryItem(name: "उपनाम", value: "इवानोव")\n]\n\nif let url = components.url {\n    print(url.absoluteString)\n    // "https://example.com/%D0%BF%D1%83%D1%82%D1%8C?name=%D0%98%D0%B2%D0%B0%D0%BD%20%26%20%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2&%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2"\n}\n
\n\n

URLComponents स्वचालित रूप से प्रत्येक घटक के लिए सही percent encoding लागू करता है। यह आपको सिरदर्द से बचाता है और कोड को साफ बनाता है।

\n\n

गलती #2: मैन्युअल स्ट्रिंग निर्माण के पक्ष में queryItems को अनदेखा करना

\n\n

"मुझे इन आपके कम्पोनेंट्स की क्या ज़रूरत है? मैं तो बस + से स्ट्रिंग जोड़ दूंगा"। परिचित विचार? और यह दूसरी लोकप्रिय गलती की ओर ले जाता है। मैन्युअल रूप से query-स्ट्रिंग बनाना बग्स का सीधा रास्ता है।

\n\n
// ❌ गलती: मैन्युअल रूप से query-स्ट्रिंग बनाना\nlet name = "इवान & पेत्रोव"\nlet query = "name=\\(name)&age=25"\nlet urlString = "https://example.com?\\(query)"\n// समस्या: नाम में एम्परसेंड को पैरामीटर विभाजक के रूप में माना जाएगा\n
\n\n

भले ही आप स्पेस बदल दें, आप &, #, ? और अन्य विशेष वर्णों को भूल जाएंगे। और यदि पैरामीटर उपयोगकर्ता से आता है? इंजेक्शन और टूटे हुए अनुरोधों की उम्मीद करें।

\n\n

समाधान: हमेशा queryItems का उपयोग करें

\n\n
// ✅ सही: queryItems आपके लिए सारा काम करता है\nvar components = URLComponents(string: "https://example.com")!\ncomponents.queryItems = [\n    URLQueryItem(name: "name", value: "इवान & पेत्रोव"),\n    URLQueryItem(name: "age", value: "25"),\n    URLQueryItem(name: "q", value: "Swift encode URL tutorial")\n]\n\nif let url = components.url {\n    print(url.absoluteStr                

ब्लॉग

पुस्तक अनुशंसाएँ