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 NSCharacterSetargumen yang memadai . Untungnya, untuk URL, ada metode kelas yang sangat berguna yang disebut URLHostAllowedCharacterSetyang 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.