เมื่อพัฒนาแอปที่ใช้ Web API ต้อง Encode URL เพื่อให้ตัวอักษรพิเศษ ทำงานได้ถูกต้อง
Objective-C
วิธีที่ 1: ใช้ Category
// NSString+URLEncoding.h
@interface NSString (URLEncoding)
- (NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;
@end
// NSString+URLEncoding.m
@implementation NSString (URLEncoding)
- (NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
CFStringConvertNSStringEncodingToEncoding(encoding)
);
}
@end
วิธีที่ 2: ใช้เมธอดในตัว (Deprecated)
NSString *url = @"https://example.com/search?q=hello world";
NSString *encoded = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Swift
วิธีที่แนะนำ (Swift 3+)
func urlEncode(_ string: String) -> String? {
return string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
}
// ใช้งาน
let original = "https://example.com/search?q=hello world"
let encoded = urlEncode(original)
// ผลลัพธ์: "https://example.com/search?q=hello%20world"
Character Set ที่ใช้บ่อย
.urlQueryAllowed- สำหรับ Query Parameter (พื้นฐาน).urlHostAllowed- สำหรับ Host/Domain.urlPathAllowed- สำหรับ Path.urlFragmentAllowed- สำหรับ Fragment (#...)
ตัวอย่างการใช้งานจริง
let baseURL = "https://api.example.com/search"
let query = "สวัสดี โลก" // ภาษาไทย
let encodedQuery = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let fullURL = "\(baseURL)?q=\(encodedQuery)"
// https://api.example.com/search?q=%E0%B8%AA%E0%B8%A7%E0%B8%B1%E0%B8%A2%E0%B8%94%20%E0%B8%9A%E0%B8%AD%E0%B8%87
หมายเหตุ: อย่าใช้ stringByAddingPercentEscapesUsingEncoding ใน Swift เพราะ Deprecated แล้ว