Di iOS8 dan sebelumnya saya dapat menggunakan:
NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
di iOS9 stringByAddingPercentEscapesUsingEncoding
telah diganti dengan stringByAddingPercentEncodingWithAllowedCharacters
:
NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
dan pertanyaan saya adalah: di mana menemukan yang dibutuhkan NSCharacterSet
( NSUTF8StringEncoding
) untuk penggantian yang tepat stringByAddingPercentEscapesUsingEncoding
?
sumber
NSURLComponents
, yang dapat menangani encoding persen untuk Anda.NSURLComponents
(dengan masing-masing komponen persen-dikodekan dengan yang sesuaiNSCharacterSet
) adalah cara yang tepat untuk pergi.Untuk Objective-C :
di mana menemukan set untuk NSUTF8StringEncoding?
Ada himpunan karakter yang telah ditentukan untuk enam komponen URL dan subkomponen yang memungkinkan encoding persen. Kumpulan karakter ini diteruskan ke
-stringByAddingPercentEncodingWithAllowedCharacters:
.Pesan penghentian mengatakan (penekanan milik saya):
Jadi Anda hanya perlu memberikan
NSCharacterSet
argumen yang memadai . Untungnya, untuk URL, ada metode kelas yang sangat berguna yang disebutURLHostAllowedCharacterSet
yang dapat Anda gunakan seperti ini:Namun, ketahuilah bahwa:
sumber
URLHostAllowedCharacterSet
adalah tidak bekerja UNTUK ME. Saya gunakanURLFragmentAllowedCharacterSet
sebagai gantinya.TUJUAN -C
SWIFT - 4
Berikut ini adalah kumpulan karakter (terbalik) yang berguna:
sumber
+
. Jadi tanda plus dalam string akan kacau jika diteruskan dalam parameter kueri - diperlakukan sebagai spasi `` di sisi server.Objective-C
kode ini bekerja untuk saya:
sumber
Swift 2.2:
sumber
Untuk Swift 3.0
Anda dapat menggunakan
urlHostAllowed
characterSet.sumber
Ini berarti bahwa Anda tidak seharusnya menyandikan
https://xpto.example.com/path/subpath
url, tetapi hanya apa yang terjadi setelah?
.Seharusnya, karena ada kasus penggunaan untuk melakukannya dalam kasus seperti:
Di mana
xxxxx
ada URL yang dikodekan sepenuhnya.sumber
Menambah jawaban yang diterima. Mempertimbangkan catatan ini
seluruh URL tidak boleh dikodekan:
sumber