VinnyD
VinnyD

Reputation: 3550

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:

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

And here's an example of the output:

path+with+spaces

Upvotes: 29

Views: 36616

Answers (5)

Fernando Perez
Fernando Perez

Reputation: 66

Also you can use the PercentEncoder library from Cocoapods.

Swift 4

  • Include the library to your Podfile:

    pod PercentEncoder

  • Import the library PercentEncoder

    import PercentEncoder

    class ViewController{

    ...

    }

  • Replace the "+" character by "%20" and use the method "ped_decodeURI"

    "path+with+spaces".replacingOccurrences(of: "+", with: "%20").ped_decodeURI()

It will return "path with spaces"

Here the link for reference: https://cocoapods.org/pods/PercentEncoder

Upvotes: 0

Mojtaba Yeganeh
Mojtaba Yeganeh

Reputation: 2922

swift 2 :

extension String  {

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

}

Upvotes: 1

delux247
delux247

Reputation: 2177

// 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/ )

Upvotes: 20

rob mayoff
rob mayoff

Reputation: 385510

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.

Upvotes: 53

Evan Mulawski
Evan Mulawski

Reputation: 55334

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)

Upvotes: 2

Related Questions