Untuk Objective-C :
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
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:
.
// Predefined character sets for the six URL components and subcomponents which allow percent encoding. These character sets are passed to -stringByAddingPercentEncodingWithAllowedCharacters:.
@interface NSCharacterSet (NSURLUtilities)
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
@end
Pesan penghentian mengatakan (penekanan milik saya):
Gunakan stringByAddingPercentEncodingWithAllowedCharacters (_ :) sebagai gantinya, yang selalu menggunakan pengkodean UTF-8 yang disarankan , dan yang menyandikan untuk komponen atau subkomponen URL tertentu karena setiap komponen atau subkomponen URL memiliki aturan berbeda untuk karakter yang valid.
Jadi Anda hanya perlu memberikan NSCharacterSet
argumen yang memadai . Untungnya, untuk URL, ada metode kelas yang sangat berguna yang disebut URLHostAllowedCharacterSet
yang dapat Anda gunakan seperti ini:
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
Namun, ketahuilah bahwa:
Metode ini ditujukan untuk persen-encode komponen URL atau string subkomponen, BUKAN seluruh string URL.
NSURLComponents
, yang dapat menangani encoding persen untuk Anda.