How to URL Decode in iOS – Objective C

The stringByReplacingPercentEscapesUsingEncoding method is not working properly as it’s not decoding special symbols that dont start with a % character, i.e., the + character. Does anyone know of a better method to do this in iOS?

Here’s what I’m currently using:

  • Swift 3 Open Link
  • iOS: Pulsing red double-height status bar
  • Change the delegate of MGTwitterEngine
  • Objective-C Blocks, Recursion Fails
  • How to store array list of custom objects to NSUserDefaults?
  • How to save custom objects in array and store it in NSUserDefaults - iPhone
  • NSString *path = [@"path+with+spaces"
         stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    

    And here’s an example of the output:

    path+with+spaces

    4 Solutions Collect From Internet About “How to URL Decode in iOS – Objective C”

    NSString *path = [[@"path+with+spaces"
        stringByReplacingOccurrencesOfString:@"+" withString:@" "]
        stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    

    Note that the plus-for-space substitution is only used in application/x-www-form-urlencoded data – the query string part of a URL, or the body of a POST request.

    // Decode a percent escape encoded string.
    - (NSString*) decodeFromPercentEscapeString:(NSString *) string {
    return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                            (__bridge CFStringRef) string,
                                                            CFSTR(""),
                                                            kCFStringEncodingUTF8);
    } 
    

    http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

    This seems to be the preferred way because…
    “Apparently” this is a “bug” apple is aware of, but they haven’t done anything about it yet… ( http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/ )

    If you are trying to replace the plus sign with percent escapes, perform a string replacement from “+” to ” ” (single space). Then use stringByAddingPercentEscapesUsingEncoding: to add the percent escapes.

    The plus sign is one of many reserved URL characters that is never encoded.

    (stringByReplacingPercentEscapesUsingEncoding: decodes the percent escapes)

    swift 2 :

    extension String  {
    
        func uriDecodedString() -> String? {
           return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
        }
    
    }