स्ट्रिंग के लिए रिप्लेसमेंट stringByAddingPercentEscapesUsingEncoding ios9 में?




objective-c url (6)

IOS8 और पूर्व में मैं उपयोग कर सकता हूं:

NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

iOS9 में stringByAddingPercentEscapesUsingEncoding को stringByAddingPercentEscapesUsingEncoding से बदल दिया गया है:

NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];

और मेरा सवाल है: जहां NSUTF8StringEncoding लिए उचित प्रतिस्थापन के लिए NSCharacterSet ( NSUTF8StringEncoding ) की stringByAddingPercentEscapesUsingEncoding ?


"इस पद्धति का अभिप्राय किसी URL घटक या उपसंयोजक स्ट्रिंग को प्रतिशत-सांकेतिक शब्दों में बदलना है, संपूर्ण URL स्ट्रिंग नहीं है।" ? - 8:30 बजे GeneCode Sep 1 '16

इसका मतलब है कि आप url के https://xpto.example.com/path/subpath को एनकोड नहीं करने वाले हैं, लेकिन इसके बाद क्या होता है ?

माना जाता है, क्योंकि मामलों में ऐसा करने के लिए उपयोग-मामले हैं:

https://example.com?redirectme=xxxxx

जहां xxxxx पूरी तरह से एन्कोडेड URL है।


उद्देश्य सी

यह कोड मेरे लिए काम करता है:

urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];

पदावनत संदेश कहता है (जोर मेरा):

StringByAddingPercentEncodingWithAllowedCharacters (_ :) के बजाय, जो हमेशा अनुशंसित UTF-8 एन्कोडिंग का उपयोग करता है , और जो किसी विशिष्ट URL घटक या उपसंयोजक के लिए एन्कोड करता है क्योंकि प्रत्येक वर्ण घटक या उपसंपादक के पास अलग-अलग नियम हैं जो वर्ण मान्य हैं।

तो आपको केवल तर्क के रूप में एक पर्याप्त NSCharacterSet आपूर्ति करने की आवश्यकता है। सौभाग्य से, URL के लिए URLHostAllowedCharacterSet नामक एक बहुत ही आसान वर्ग विधि है जिसे आप इस तरह से उपयोग कर सकते हैं:

let encodedHost = unencodedHost.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())

स्विफ्ट 3 के लिए अपडेट - विधि स्थिर संपत्ति बन जाती है urlHostAllowed :

let encodedHost = unencodedHost.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

हालांकि, जागरूक रहें:

यह विधि किसी URL घटक या उपसंयोजक स्ट्रिंग को प्रतिशत-एन्कोड करने के उद्देश्य से है, संपूर्ण URL स्ट्रिंग नहीं है।


स्विफ्ट 3.0 के लिए

आप urlHostAllowed characterSet का उपयोग कर सकते हैं।

/// एक मेजबान URL उपसमिति में अनुमत वर्णों के लिए निर्धारित वर्ण लौटाता है।

public static var urlHostAllowed: CharacterSet { get }

WebserviceCalls.getParamValueStringForURLFromDictionary(settingsDict as! Dictionary<String, AnyObject>).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)

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;
}
}

URLHostAllowedCharacterSet मेरे लिए काम नहीं कर रहा है । मैं इसके बजाय URLFragmentAllowedCharacterSet उपयोग करता URLFragmentAllowedCharacterSet

उद्देश्य सी

NSCharacterSet *set = [NSCharacterSet URLFragmentAllowedCharacterSet];
NSString * encodedString = [@"url string" stringByAddingPercentEncodingWithAllowedCharacters:set];

स्विफ्ट - 4

"url string".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

निम्नलिखित उपयोगी (उल्टे) वर्ण सेट हैं:

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>[email protected]\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>[email protected][\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>[email protected][\]^`




deprecated