Заменить пробелы в URL

У меня есть URL-адрес в приложении iPhone для работы. Но проблема в том, что в URL-адресе есть пробелы. Я хочу заменить пробелы на «% 20». Я знаю, что есть методы stringByReplacingOccurencesOfString и stringByAddingPercentEscapesUsingEncoding. Я также использовал их. Но они у меня не работают. Пробелы заменены некоторыми необычными значениями.

Я применяю эти методы к экземпляру NSString.


person Joy    schedule 09.08.2010    source источник
comment
Посмотрите этот пост здесь: stackoverflow.com/questions/695911/ Ответ: NSString* escapedUrl = [originalUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];   -  person Tieme    schedule 12.06.2011


Ответы (11)


Правильный формат замены пробела в URL:

Свифт 4.2, Свифт 5

var urlString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

Свифт 4

var urlString = originalString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)

Цель C

NSString *urlString;//your url string.

urlString = [originalUrl stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

or

urlString = [originalUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

iOS 9 и выше

urlString = [originalUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
person Raj    schedule 04.03.2011
comment
@RaquibulIslam Я отредактировал свой ответ, пожалуйста, проверьте сейчас - person Raj; 19.03.2015
comment
Я думаю, что stringByReplacingPercentEscapesUsingEncoding() устарела. Вместо этого мы можем использовать stringByRemovingPercentEncoding - person girish_vr; 05.02.2016
comment
будет ли это работать для локального пути? я имею в виду каталог документов - person guru; 25.06.2020
comment
@guru Я не думаю, что вам нужно форматировать путь к локальному каталогу документов - person Raj; 30.07.2020

Свифт 2.0

let originalUrl = "http://myurl.com/my photo.png"
let urlNew:String = urlReq.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet())! 

Вывод:

http://myurl.com/my%20photo.png
person Dasoga    schedule 20.10.2015

Чтобы заменить вхождение в SWIFT 3:

let updatedUrl = originalUrl.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
person Jitendra Tanwar    schedule 27.06.2017
comment
будет ли это работать для локального пути? я имею в виду каталог документов - person guru; 25.06.2020

Свифт 4

Другой способ заменить пустое пространство методом replaceOccurrences:

let yourString = "http://myurl.com/my photo.png"
let urlNew:String = yourString.replacingOccurrences(of: " ", with: "%20").trimmed 

Это заменит пустое пространство ("") на "%20"

person Gilad Brunfman    schedule 08.02.2017
comment
ошибка: значение типа "String" не имеет члена "trim" - person Sabrina; 17.01.2019
comment
@Mehdico, это странно, я всегда обрезаю струны. В этом примере вам не нужно обрезать строку, так как вы знаете, что это такое. Но я бы очистил проект и попытался запустить его снова. в конце строки добавить .trimmed - person Gilad Brunfman; 17.01.2019
comment
чувак, я думаю, ты используешь расширение для класса String, потому что .trimmed не найден в swift 4 и 4.2 - person Sabrina; 18.01.2019
comment
Вам не нужно обрезать строку, чтобы заменить пробел - person Gilad Brunfman; 18.01.2019
comment
Попробуйте это для кодирования: - stringByAddingPercentEncodingWithAllowedCharacters: URLPathAllowedCharacterSet и для декодирования: - [NSURL fileURLWithPath: [self.yourString stringByRemovingPercentEncoding]] - person Shrikant Phadke; 10.03.2020
comment
будет ли это работать для локального пути? я имею в виду каталог документов - person guru; 25.06.2020

Свифт 5

var urlString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
person Shakeel Ahmed    schedule 30.04.2019
comment
будет ли это работать для локального пути? я имею в виду каталог документов - person guru; 25.06.2020

Swift 5.3, очистите строку,

let str = "  www.test.com  "
let trimmed = str.trimmingCharacters(in: .whitespacesAndNewlines)
print(str) // "www.test.com" 
person ikbal    schedule 19.06.2020

Надеюсь, это сработает

let url = "https:youtube.56432fgrtxcvfname=xyz&sname=tuv"
let urlNew:String = url.replacingOccurrences(of: " ", with: "%20")
Alamofire.request(urlNew, method: .get, headers: headers).responseJSON{
response in
print(response)    
}

Он удалит все виды пробелов из URL-адреса.

person Raghib Arshi    schedule 26.09.2019

SWIFT 3.1

Простой способ заменить пустое место на replaceOccurrences:

URL = URL.replacingOccurrences(of: " ", with: "", options: .literal, range: nil)
person Shibin k kurian    schedule 17.08.2017
comment
Не работает, поскольку в URL-адресе нет члена replaceingOccurences. У String есть этот метод, а у URL нет. - person shiv; 18.09.2019

Свифт 4, iOS-9

let **urlSearchVal**:String = "top 10 movies"     
let urlString = 

    "https://www.googleapis.com/youtube/v3/search?part=snippet&q=\(urlSearchVal)&key=......&type=video"   
//replace ...... above with your youtube key   
// to ignoring white space in search  
        let UrlString :String = urlString.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!
person that guy    schedule 05.11.2017
comment
добро пожаловать в СО. пожалуйста, улучшите качество вашего ответа - person Neuron; 05.11.2017

Решение Swift 4. Вы просто проходите через строку, и она заполняет пробелы %20 и добавляет «http://» в начало строки. Довольно мило!

URL(fileURLWithPath: String) 
person KDiaz    schedule 11.03.2019

person    schedule
comment
Вам нужно дать больше пояснений к этому коду. Есть и другие, которые приходят к этому вопросу в поисках понимания не только кода. Помогите и другим. - person wesley franks; 25.06.2019