escape-URL - PullRequest
       4

escape-URL

12 голосов
/ 21 февраля 2011

Я делаю запрос к внешнему API, используя метод GET. По некоторым причинам результаты, которые я получаю, не работают, если searchText содержит пробелы, например он отлично работает для переполнения стека, но если searchText введен как «переполнение стека», он не будет работать (предположим, что присутствуют оба значения). Нужно ли бежать, прежде чем отправлять URL-запрос?

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://mysite.com/xyz?nameBeginsWith=%@", searchText];

Ответы [ 2 ]

27 голосов
/ 21 февраля 2011

Вы пробовали это?

NSString *urlstr = [NSString stringWithFormat:@"http://mysite.com/xyz?nameBeginsWith=%@", searchText];
urlstr = [urlstr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

stringByAddingPercentEscapesUsingEncoding берет строку и возвращает тот же процент строки, который был экранирован для легального использования в качестве URL.Таким образом, ответ на ваш вопрос будет: да, NSURL требуется правильно экранированная строка для инициализации

NSURL Reference

1 голос
/ 21 сентября 2017

Метод stringByAddingPercentEscapesUsingEncoding устарел.

Правильный способ экранирования URL-адресов:

NSString * escapedSearchText = [searchText stringByAddingPercentEncodingWithAllowedCharacters *: [NSCharacterSlowQuedSetQed1007 *

NSString * url = [NSString stringWithFormat: @ "http://example.com/xyz?nameBeginsWith=%@", escapedSearchText];

...