Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> iOS

วิธี URL Encode สตริง (NSString) ใน iPhone

เมื่อพัฒนาแอปที่ใช้ 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 แล้ว