В iOS8 и ранее я могу использовать:
NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
в iOS9 stringByAddingPercentEscapesUsingEncoding
заменено на stringByAddingPercentEncodingWithAllowedCharacters
:
NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
и у меня вопрос: где найти необходимый NSCharacterSet
( NSUTF8StringEncoding
) для правильной замены stringByAddingPercentEscapesUsingEncoding
?
источник
NSURLComponents
, который может обрабатывать процентное кодирование за вас.NSURLComponents
(с каждым компонентом, закодированным в процентах с соответствующимNSCharacterSet
), это правильный путь.Для Objective-C :
где найти набор для NSUTF8StringEncoding?
Для шести компонентов и подкомпонентов URL-адреса существуют предопределенные наборы символов, которые допускают процентное кодирование. Эти наборы символов передаются в
-stringByAddingPercentEncodingWithAllowedCharacters:
.В сообщении об устаревании говорится (выделено мной):
Так что вам нужно только предоставить адекватный
NSCharacterSet
аргумент. К счастью, для URL-адресов есть очень удобный метод класса,URLHostAllowedCharacterSet
который вы можете использовать следующим образом:Однако имейте в виду, что:
источник
URLHostAllowedCharacterSet
это НЕ РАБОТАЕТ ДЛЯ МЕНЯ. Я используюURLFragmentAllowedCharacterSet
вместо этого.ЦЕЛЬ -C
SWIFT - 4
Ниже приведены полезные (инвертированные) наборы символов:
источник
+
. Таким образом, знаки плюса в строке будут искажены, если они будут переданы в параметрах запроса - они будут рассматриваться как пробел на стороне сервера.Objective-C
этот код работает для меня:
источник
Swift 2.2:
источник
Для Swift 3.0
Вы можете использовать
urlHostAllowed
characterSet.источник
Это означает, что вы не должны кодировать
https://xpto.example.com/path/subpath
URL-адрес, а только то, что идет после?
.Предполагается, потому что есть варианты использования для таких случаев, как:
Где
xxxxx
- полностью закодированный URL.источник
Добавление к принятому ответу. Принимая во внимание это примечание
весь URL-адрес не должен кодироваться:
источник