W iOS8 i wcześniejszych mogę używać:
NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
w iOS9 stringByAddingPercentEscapesUsingEncoding
został zastąpiony przez stringByAddingPercentEncodingWithAllowedCharacters
:
NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
a moje pytanie brzmi: gdzie znaleźć potrzebne NSCharacterSet
( NSUTF8StringEncoding
) do poprawnej wymiany stringByAddingPercentEscapesUsingEncoding
?
źródło
NSURLComponents
, które może obsługiwać kodowanie procentowe za Ciebie.NSURLComponents
(z każdym komponentem zakodowanym procentowo z odpowiednimNSCharacterSet
) jest właściwą drogą.Dla celu C :
gdzie znaleźć zestaw dla NSUTF8StringEncoding?
Istnieją predefiniowane zestawy znaków dla sześciu składników adresu URL i podskładników, które umożliwiają kodowanie procentowe. Te zestawy znaków są przekazywane do
-stringByAddingPercentEncodingWithAllowedCharacters:
.Komunikat o wycofaniu mówi (moje podkreślenie):
Musisz więc podać tylko odpowiedni
NSCharacterSet
argument. Na szczęście w przypadku adresów URL istnieje bardzo przydatna metoda klasowaURLHostAllowedCharacterSet
, której można użyć w następujący sposób:Pamiętaj jednak, że:
źródło
URLHostAllowedCharacterSet
jest NIE PRACA DLA MNIE. UżywamURLFragmentAllowedCharacterSet
zamiast tego.CEL C
SWIFT - 4
Oto przydatne (odwrócone) zestawy znaków:
źródło
+
. Tak więc znaki plus w ciągu zostaną pomieszane, jeśli zostaną przekazane w parametrach zapytania - traktowane jako spacja `` po stronie serwera.Cel C
ten kod działa dla mnie:
źródło
Swift 2.2:
źródło
Dla Swift 3.0
Możesz użyć
urlHostAllowed
zestawu znaków.źródło
Oznacza to, że nie powinieneś kodować adresu
https://xpto.example.com/path/subpath
URL, a tylko to, co następuje po?
.Przypuszczalnie, ponieważ istnieją przypadki użycia do zrobienia tego w przypadkach takich jak:
Gdzie
xxxxx
jest w pełni zakodowany adres URL.źródło
Dodawanie do zaakceptowanej odpowiedzi. Biorąc pod uwagę tę uwagę
cały adres URL nie powinien być kodowany:
źródło