Đối với Objective-C :
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
tìm bộ cho NSUTF8StringEncoding ở đâu?
Có các bộ ký tự được xác định trước cho sáu thành phần URL và thành phần phụ cho phép mã hóa phần trăm. Các bộ ký tự này được chuyển đến -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
Thông báo không dùng nữa cho biết (nhấn mạnh của tôi):
Thay vào đó, hãy sử dụng stringByAddingPercentEncodingWithAllowedCharacters (_ :), luôn sử dụng mã hóa UTF-8 được khuyến nghị và mã hóa cho một thành phần URL cụ thể hoặc thành phần phụ vì mỗi thành phần URL hoặc thành phần phụ có các quy tắc khác nhau cho những ký tự nào là hợp lệ.
Vì vậy, bạn chỉ cần cung cấp một NSCharacterSet
đối số thích hợp . May mắn thay, đối với URL, có một phương thức lớp rất tiện dụng được gọi là URLHostAllowedCharacterSet
bạn có thể sử dụng như sau:
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
Tuy nhiên, hãy lưu ý rằng:
Phương pháp này nhằm mã hóa phần trăm thành phần URL hoặc chuỗi thành phần phụ, KHÔNG PHẢI toàn bộ chuỗi URL.
NSURLComponents
, có thể xử lý mã hóa phần trăm cho bạn.