दिलचस्प पोस्ट
फ्लास्क पर आपको एक क्वेरी स्ट्रिंग कैसे मिलती है? वर्डल जैसे शब्द बादल को क्रियान्वित करने के लिए एल्गोरिथ्म कैसे नियंत्रण का पता लगाने के लिए + एक onclick div विशेषता से जावास्क्रिप्ट में क्लिक करें? MySQL: जुड़ने के प्रकारों का त्वरित विघटन कन्स्ट्रक्टर आरंभीकरण-सूची मूल्यांकन क्रम वसंत-कोर 3.2.9 + जावा 8 विंडोज़ फोन के लिए स्थानीय एसक्यूएल डेटाबेस समर्थन 7 कर्नेल और उपयोगकर्ता थ्रेड के बीच संबंध मैं वर्ष, महीने, दिनों में किसी व्यक्ति की उम्र की गणना कैसे कर सकता हूं? बाँध क्यों एक बंद से धीमी है? पैसे से निपटने के लिए क्या मुझे NSDecimalNumber का उपयोग करना चाहिए? पायथन में पुरानी शैली और नई शैली वर्गों में क्या अंतर है? मैं रनटाइम पर एक क्लास पर एक विशेषता कैसे पढ़ूं? डेटाबेस ईएवी पेशेवरों / विपक्ष और विकल्प इंटरनेट एक्सप्लोरर-विशिष्ट सीएसएस या इंटरनेट एक्सप्लोरर-विशिष्ट जावास्क्रिप्ट कोड जैसी कुछ स्थितियों के लिए मैं केवल इंटरनेट एक्सप्लोरर 10 को कैसे लक्षित कर सकता हूं?

स्विफ्ट में यूआरएल को कैसे एन्कोड करना

यह मेरा URL

समस्या यह है, कि address फ़ील्ड urlpath जोड़ा नहीं जा रहा है।

क्या किसी को पता है कि यह क्यों है?

 var address:string address = "American Tourister, Abids Road, Bogulkunta, Hyderabad, Andhra Pradesh, India" let urlpath = NSString(format: "http://maps.googleapis.com/maps/api/geocode/json?address="+"\(address)") 

वेब के समाधान से एकत्रित समाधान "स्विफ्ट में यूआरएल को कैसे एन्कोड करना"

stringByAddingPercentEncodingWithAllowedCharacters उपयोग stringByAddingPercentEncodingWithAllowedCharacters :

 var escapedAddress = address.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 

stringByAddingPercentEscapesUsingEncoding: उपयोग stringByAddingPercentEscapesUsingEncoding: IOS 9 और OS X v10.11 में बहिष्कृत

 var address = "American Tourister, Abids Road, Bogulkunta, Hyderabad, Andhra Pradesh, India" var escapedAddress = address.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) let urlpath = NSString(format: "http://maps.googleapis.com/maps/api/geocode/json?address=\(escapedAddress)") 

स्विफ्ट 3

 var address = "American Tourister, Abids Road, Bogulkunta, Hyderabad, Andhra Pradesh, India" let escapedAddress = address.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) let urlpath = String(format: "http://maps.googleapis.com/maps/api/geocode/json?address=\(escapedAddress)") 

स्विफ्ट 3:

 let escapedString = originalString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed) 

यदि यह संभव है कि आपके यूआरएल में जो मूल्य जोड़ रहे हैं तो आरक्षित वर्ण हो सकते हैं (जैसा कि आरएफसी 3986 के भाग 2 के अनुसार परिभाषित किया गया है), आपको अपने प्रतिशत-बचने को परिशोधित करना पड़ सकता है विशेष रूप से, जब & और + एक यूआरएल में वैध अक्षर हैं, वे एक यूआरएल क्वेरी पैरामीटर मान के भीतर वैध नहीं हैं (क्योंकि & क्वेरी पैरामीटर के बीच सीमांकक के रूप में उपयोग किया जाता है जो आपके मूल्य को समय से पहले खत्म कर देगा, और + स्पेस वर्ण में अनुवाद किया जाता है) । दुर्भाग्य से, मानक प्रतिशत-बचने से उन सीमांकक अनसेकड होते हैं

इस प्रकार, आप प्रतिशत सभी वर्णों को बच सकते हैं जो आरएफसी 3986 की अनारक्षित वर्णों की सूची में नहीं हैं:

वर्ण जिन्हें यूआरआई में अनुमति है लेकिन आरक्षित उद्देश्य नहीं हैं उन्हें अनारक्षित कहा जाता है इनमें अपरकेस और लोअरकेस अक्षरों, दशमलव अंक, हाइफ़न, अवधि, अंडरस्कोर, और टिल्ड शामिल हैं।

      अनारक्षित = अल्फा / डिजिट / "-" / "।"  / "_" / "~"

बाद में, धारा 3.4 में, आरएफसी आगे जोड़कर चिंतित है ? और / एक क्वेरी में अनुमति वाले वर्णों की सूची में:

वर्ण स्लैश ("/") और प्रश्न चिह्न ("?") क्वेरी घटक के भीतर डेटा का प्रतिनिधित्व कर सकते हैं। सावधान रहें कि कुछ पुराने, गलत कार्यान्वयन ऐसे डेटा को सही तरीके से नियंत्रित नहीं कर सकते हैं जब यह सापेक्ष संदर्भ (धारा 5.1) के लिए आधार यूआरआई के रूप में उपयोग किया जाता है, जाहिरा तौर पर वे पथ डेटा से क्वेरी डेटा को अंतर करने में विफल होते हैं जबकि श्रेणीबद्ध विभाजक हालांकि, चूंकि क्वेरी घटकों को अक्सर "कुंजी = मूल्य" जोड़े के रूप में पहचानने वाली जानकारी देने के लिए उपयोग किया जाता है और अक्सर उपयोग किए जाने वाले मान दूसरे यूआरआई के संदर्भ में होते हैं, यह कभी-कभी उन पात्रों के प्रतिशत-एन्कोडिंग से बचने के प्रयोज्यता के लिए बेहतर होता है

इस प्रकार, आप स्ट्रिंग विस्तार परिभाषित कर सकते हैं:

 extension String { /// Returns a new string made from the `String` by replacing all characters not in the unreserved /// character set (As defined by RFC3986) with percent encoded characters. func stringByAddingPercentEncodingForURLQueryParameter() -> String? { let allowedCharacters = NSCharacterSet.URLQueryParameterAllowedCharacterSet() return stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacters) } } 

कहा पे

 extension NSCharacterSet { /// Returns the character set for characters allowed in the individual parameters within a query URL component. /// /// The query component of a URL is the component immediately following a question mark (?). /// For example, in the URL `http://www.example.com/index.php?key1=value1#jumpLink`, the query /// component is `key1=value1`. The individual parameters of that query would be the key `key1` /// and its associated value `value1`. /// /// According to RFC 3986, the set of unreserved characters includes /// /// `ALPHA / DIGIT / "-" / "." / "_" / "~"` /// /// In section 3.4 of the RFC, it further recommends adding `/` and `?` to the list of unescaped characters /// for the sake of compatibility with some erroneous implementations, so this routine also allows those /// to pass unescaped. class func URLQueryParameterAllowedCharacterSet() -> Self { return self.init(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~/?") } } 

और फिर आप इस नए फ़ंक्शन का उपयोग कर सकते हैं (उदाहरण के लिए, मान लें कि मैं "वाशिंगटन और ली विश्वविद्यालय" की तलाश कर रहा था):

 let address = "Washington & Lee University" let escapedAddress = address.stringByAddingPercentEncodingForURLQueryParameter() ?? "" let url = NSURL(string: "http://maps.googleapis.com/maps/api/geocode/json?address=\(escapedAddress)") 

वैसे, जबकि इसे ऊपर उल्लिखित आरएफसी में विचार नहीं किया गया है, खंड 4.10.22.6, यूआरएल-एन्कोडेड फ़ॉर्म डेटा , डब्लूएसईसी एचटीएमएल स्पेक का कहना है कि application/x-www-form-urlencoded अनुरोधों को भी रिक्त अक्षर के साथ + अक्षरों (प्रति अक्षर) को बदलना चाहिए और ऐसे अक्षरों में तारांकन शामिल हैं जिन्हें भाग नहीं किया जाना चाहिए), इस प्रकार:

 extension String { /// Returns a new string made from the `String` by replacing all characters not in the unreserved /// character set (as defined by W3C HTML specification for `application/x-www-form-urlencoded` /// requests) with percent encoded characters. func stringByAddingPercentEncodingForFormUrlencoded() -> String? { let allowedCharacters = NSMutableCharacterSet.URLQueryParameterAllowedCharacterSet() allowedCharacters.addCharactersInString(" ") return stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacters)?.stringByReplacingOccurrencesOfString(" ", withString: "+") } } 

व्यवहार में, वेब सेवा शायद ही कभी परवाह करती है कि रिक्त स्थान प्रतिशत-बचा था या + चरित्र के साथ प्रतिस्थापित किया गया था।

स्विफ्ट 2.0

 let needsLove = "string needin some URL love" let safeURL = needsLove.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 

सहायक प्रोग्रामिंग युक्तियाँ और हैक्स

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

 /?paramname=paramvalue&paramname=paramvalue 

इन वर्णों को यूआरएल क्वेरीज़ में पूर्ण रूप से अनुमति दी जाती है लेकिन पैरामीटर मानों में नहीं।

आरएफसी 3986 अनारक्षित वर्णों के बारे में विशेष रूप से बात करता है, जो अनुमति से अलग है:

2.3। अनारक्षित वर्ण

वर्ण जिन्हें यूआरआई में अनुमति है लेकिन आरक्षित नहीं हैं
उद्देश्य को अनारक्षित कहा जाता है इनमें अपरकेस और लोअरकेस अक्षरों, दशमलव अंक, हाइफ़न, अवधि, अंडरस्कोर, और टिल्ड शामिल हैं।

  unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" 

तदनुसार:

 extension String { var URLEncoded:String { let unreservedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~" let unreservedCharset = NSCharacterSet(charactersInString: unreservedChars) let encodedString = self.stringByAddingPercentEncodingWithAllowedCharacters(unreservedCharset) return encodedString ?? self } } 

ऊपर दिए गए कोड वर्णांक के विशाल आकार के कारण alphanumericCharacterSet को कॉल नहीं करता है (103806 वर्ण)। और यूआरएल एन्कोडिंग के प्रयोजन के लिए इसका उपयोग करने के लिए, कितने यूनिकोड वर्ण alphanumericCharacterSet अनुमति देता है, यह देखते हुए यह गलत होगा।

उपयोग:

 let URLEncodedString = myString.URLEncoded 

XCODE 8, SWIFT 3.0

Grokswift से

स्ट्रिंग्स से यूआरएल बनाना बग्स के लिए एक मेनफील्ड है बस एक एकल / या गलती से यूआरएल सांकेतिक शब्दों में बदलना याद आती है? एक क्वेरी में और आपकी एपीआई कॉल असफल हो जायेगी और आपके एप के पास प्रदर्शित करने के लिए कोई डाटा नहीं होगा (या यदि आप उस संभावना की आशा नहीं कर रहे हैं तो क्रैश भी)। आईओएस 8 के बाद से NSURLComponents और NSURLQueryItems का उपयोग कर यूआरएल बनाने का एक बेहतर तरीका है।

 func createURLWithComponents() -> URL? { var urlComponents = URLComponents() urlComponents.scheme = "http" urlComponents.host = "maps.googleapis.com" urlComponents.path = "/maps/api/geocode/json" let addressQuery = URLQueryItem(name: "address", value: "American Tourister, Abids Road, Bogulkunta, Hyderabad, Andhra Pradesh, India") urlComponents.queryItems = [addressQuery] return urlComponents.url } 

नीचे guard स्टेटमेंट का उपयोग कर यूआरएल तक पहुंचने के लिए कोड है।

 guard let url = createURLWithComponents() else { print("invalid URL") return nil } print(url) 

आउटपुट:

 http://maps.googleapis.com/maps/api/geocode/json?address=American%20Tourister,%20Abids%20Road,%20Bogulkunta,%20Hyderabad,%20Andhra%20Pradesh,%20India 

और पढ़ें: NSURLComponents और NSURLQueryItems के साथ यूआरएल बिल्डिंग

मैक ओएस 10.9 में मैवॅरिक्स और आईओएस 7 NSURLComponents शुरू किए गए हैं जो एक सुंदर सुविधाजनक तरीके से विभिन्न यूआरएल भागों की एन्कोडिंग को संभालती हैं।

NSURLComponents वर्ग एक वर्ग है जो आरएफसी 3986 पर आधारित URL को पार्स करने के लिए डिज़ाइन किया गया है और अपने घटक भागों से यूआरएल का निर्माण करने के लिए। इसका व्यवहार एनएसयूआरएल कक्षा से पूरी तरह अलग है, जो पुराने आरएफसी के अनुरूप है। हालांकि, आप आसानी से एक यूआरएल घटक ऑब्जेक्ट की सामग्री या इसके विपरीत के आधार पर एक NSURL वस्तु प्राप्त कर सकते हैं।

 let address = "American Tourister, Abids Road, Bogulkunta, Hyderabad, Andhra Pradesh, India" let components = NSURLComponents(string: "http://maps.googleapis.com/maps/api/geocode/json")! // create a query item key=value let queryItem = NSURLQueryItem(name: "address", value: address) // add the query item to the URL, NSURLComponents takes care of adding the question mark. components.queryItems = [queryItem] // get the properly percent encoded string let urlpath = components.string! print(urlpath) 

स्विफ्ट 3 के लिए अपडेट किया गया:

 var escapedAddress = address.addingPercentEncoding( withAllowedCharacters: CharacterSet.urlQueryAllowed) 

सिर्फ आरएफसी 3986 अनारक्षित पात्रों के लिए स्ट्रिंग क्लास का विस्तार करने के लिए डेसमंड ह्यूम का जवाब पूरा करना मान्य एन्कोडिंग फ़ंक्शन (यदि आप क्वेरी फार्म पैरामीटर एनकोड करते हैं तो आवश्यक):

स्विफ्ट 3

 extension String { var RFC3986UnreservedEncoded:String { let unreservedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~" let unreservedCharsSet: CharacterSet = CharacterSet(charactersIn: unreservedChars) let encodedString: String = self.addingPercentEncoding(withAllowedCharacters: unreservedCharsSet)! return encodedString } } 

मेरे मामले में जहां पिछले घटक गैर लैटिन अक्षर थे, मैंने Swift 2.2 में निम्नलिखित किया:

 extension String { func encodeUTF8() -> String? { //If I can create an NSURL out of the string nothing is wrong with it if let _ = NSURL(string: self) { return self } //Get the last component from the string this will return subSequence let optionalLastComponent = self.characters.split { $0 == "/" }.last if let lastComponent = optionalLastComponent { //Get the string from the sub sequence by mapping the characters to [String] then reduce the array to String let lastComponentAsString = lastComponent.map { String($0) }.reduce("", combine: +) //Get the range of the last component if let rangeOfLastComponent = self.rangeOfString(lastComponentAsString) { //Get the string without its last component let stringWithoutLastComponent = self.substringToIndex(rangeOfLastComponent.startIndex) //Encode the last component if let lastComponentEncoded = lastComponentAsString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet()) { //Finally append the original string (without its last component) to the encoded part (encoded last component) let encodedString = stringWithoutLastComponent + lastComponentEncoded //Return the string (original string/encoded string) return encodedString } } } return nil; } } 

ऊपर ब्रायन चेन के उत्तर में जोड़ना:

बस किसी और को लगाओ Alamofire के साथ कुछ समान हो रही है:

त्रुटि: अनुकूलन के साथ अलामॉफ़र संकलित किया गया था – कदम अजीब तरह से व्यवहार कर सकता है; वेरिएबल उपलब्ध नहीं हो सकते हैं।

यह एक बहुत ही वर्णनात्मक त्रुटि नहीं है Google भौगोलिक सेवाओं के लिए यूआरएल का निर्माण करते समय मुझे उस त्रुटि मिल रही थी I मैं सड़क के पते को पहले ही एन्कोडिंग के बिना यूआरएल के अंत तक एक सड़क का पता लगा रहा था। मैं ब्रायन चेन के समाधान का उपयोग कर इसे ठीक करने में सक्षम था:

 var streetAdress = "123 fake street, new york, ny" var escapedStreetAddress = streetAddress.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) let url = "\(self.baseUrl)&address=\(escapedAddress!)" 

उसने मेरे लिए इसे हल कर दिया! ऐसा नहीं था कि इस पते के स्थान और अल्पविराम आदि थे।

मनाइए कि यह किसी और के लिए सहायक हो!