สำหรับ Objective-C:
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
จะหา set สำหรับ NSUTF8StringEncoding ได้ที่ไหน
มีชุดอักขระที่กำหนดไว้ล่วงหน้าสำหรับส่วนประกอบ URL หกรายการและส่วนประกอบย่อยซึ่งอนุญาตให้มีการเข้ารหัสเปอร์เซ็นต์ -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
ข้อความเลิกใช้งานกล่าวว่า (เน้นของฉัน):
ใช้ stringByAddingPercentEncodingWithAllowedCharacters (_ :) แทนซึ่งจะใช้การเข้ารหัส UTF-8 ที่แนะนำเสมอและการเข้ารหัสใดสำหรับส่วนประกอบ URL หรือส่วนประกอบย่อยที่เฉพาะเจาะจงเนื่องจากคอมโพเนนต์ URL หรือส่วนประกอบย่อยแต่ละรายการมีกฎที่แตกต่างกันสำหรับอักขระที่ใช้ได้
ดังนั้นคุณต้องจัดหาNSCharacterSet
อาร์กิวเมนต์ให้เพียงพอเท่านั้น โชคดีสำหรับ URL มีวิธีการคลาสที่สะดวกมากซึ่งเรียกURLHostAllowedCharacterSet
ว่าคุณสามารถใช้ได้ดังนี้:
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
โปรดทราบว่า:
วิธีนี้มีจุดมุ่งหมายเพื่อเข้ารหัสเปอร์เซ็นต์ส่วนประกอบ URL หรือสตริงส่วนประกอบย่อยไม่ใช่สตริง URL ทั้งหมด
NSURLComponents
ซึ่งสามารถจัดการการเข้ารหัสเปอร์เซ็นต์ให้คุณได้