Objective-C için :
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
NSUTF8StringEncoding için set nerede bulunur?
Yüzde kodlamaya izin veren altı URL bileşeni ve alt bileşeni için önceden tanımlanmış karakter kümeleri vardır. Bu karakter kümelerine geçilir -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
Kullanımdan kaldırma mesajı (vurgu benim) diyor:
Bunun yerine stringByAddingPercentEncodingWithAllowedCharacters (_ :) kullanın, bu, her zaman önerilen UTF-8 kodlamasını kullanır ve her URL bileşeni veya alt bileşeni hangi karakterlerin geçerli olduğuna ilişkin farklı kurallara sahip olduğundan, belirli bir URL bileşeni veya alt bileşeni için kodlama yapar .
Bu nedenle, yalnızca yeterli bir NSCharacterSet
argüman . Neyse ki, URL'ler için URLHostAllowedCharacterSet
şu şekilde kullanabileceğiniz çok kullanışlı bir sınıf yöntemi vardır :
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
Bununla birlikte, şunun farkında olun:
Bu yöntem, bir URL dizesinin tamamını DEĞİL, bir URL bileşenini veya alt bileşen dizesini yüzde olarak kodlamayı amaçlamaktadır.
NSURLComponents
sizin için yüzde kodlamayı kaldırabilecek olanı kullanmanızı şiddetle tavsiye ederim.