кодировать URL-адрес с помощью AllowedCharacters не работает кодирование% 20 как% 2520 (означает кодирование% как% 25) - PullRequest
0 голосов
/ 22 апреля 2020

Ниже приведен мой код для кодировки URL

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

Но я столкнулся с проблемой, если URL содержит% 20. кодируется как% 2520, хотя я добавил urlQueryAllowed

Исходный URL: https://mydomain.in/retailers_data_v2/retailer/320/17372-Tea%20Coffee%20Vending%20Machine.JPG

Кодированный URL: https://mydomain.in/retailers_data_v2/retailer/320/17372-Tea%2520Coffee%2520Vending%2520Machine.JPG

1 Ответ

0 голосов
/ 22 апреля 2020

Если у вас уже есть закодированная строка URL, вам нужно сначала удалить кодировку в процентах, прежде чем применять ее снова.

Если вы не уверены, что ваш URL уже закодирован или нет, вы можете просто используйте if let для removingPercentEncoding и, в зависимости от его результата, вызовите addingPercentEncoding для исходного URL-адреса или для того, с которого вы удалили кодировку.

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)
}
...