amodkanthe
amodkanthe

Reputation: 4530

encode url swift withAllowedCharacters not working encoding %20 as %2520 (means encoding % as %25)

Following is my code for URL encoding

extension String {
var encoded: String {
    return self.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
  }
}

But I am facing issue if url contains %20. it is encoding it as %2520 although I have added urlQueryAllowed

Original url: https://mydomain.in/retailers_data_v2/retailer/320/17372-Tea%20Coffee%20Vending%20Machine.JPG

Encoded url: https://mydomain.in/retailers_data_v2/retailer/320/17372-Tea%2520Coffee%2520Vending%2520Machine.JPG

Upvotes: 0

Views: 1749

Answers (1)

David Pasztor
David Pasztor

Reputation: 54795

If you have an already encoded URL String, you first need to remove percent encoding before applying it again.

If you aren't sure whether the URL you have is already encoded or not, you can simply use an if let on removingPercentEncoding and depending on its result, either call addingPercentEncoding on the original URL or on the one that you removed the encoding from.

let alreadyEncodedURLString = "https://mydomain.in/retailers_data_v2/retailer/320/17372-Tea%20Coffee%20Vending%20Machine.JPG"
if let unencodedURLString = alreadyEncodedURLString.removingPercentEncoding {
    unencodedURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
} else {
    alreadyEncodedURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
}

Upvotes: 3

Related Questions