2010-01-29 28 views
10

Phương pháp mã hóa NSString nào sẽ thoát khỏi ký tự và (&) ký tự chính xác vào %26?Phương pháp NSString để thoát phần trăm '&' cho URL

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 

lấy khoảng trắng (% 20) và các baddies khác nhưng bỏ qua ký hiệu và dấu!?!

+0

Ký hiệu & là một ký tự hợp lệ trong URL. 'www.example.com? a = 5 & b = 7' –

+1

tôi biết .. nhưng nó làm rối tung các tham số truy vấn của tôi, vì vậy cần phải" loại bỏ "các lần xuất hiện & trong các giá trị trước khi thêm vào chuỗi truy vấn .. – Meltemi

Trả lời

43

Dấu cách sẽ không được xử lý theo phương pháp đó vì chúng là các ký tự hợp pháp trong URL. Có lẽ bạn nên xử lý trước các phần đặc biệt có vấn đề, từng phần, trước cuộc gọi này.

+66

+1 cho chữ viết. –

23

Đây là một giải pháp tốt đẹp cho vấn đề này được lấy từ Bagonca blog để URL mã hóa NSStrings của bạn:

+ (NSString *)urlEncodeValue:(NSString *)str 
{ 
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8); 
    return [result autorelease]; 
} 

Thêm CFBridgingRelease( để tương thích ARC.

+ (NSString *)urlEncodeValue:(NSString *)str 
{ 
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8)); 
    return result; 
} 
+0

Điều này đã giải quyết được sự cố của tôi. Câu trả lời khó tìm bởi vì tôi không biết nguyên nhân là các ký tự trong nội dung POST của tôi. Có vẻ như đó là do kích thước tệp của tôi. Nếu bạn đang gửi một sendAsynchronousRequest và yêu cầu chấm dứt tải trọng, hãy kiểm tra mã hóa. Cảm ơn. – dwaz

8

Câu trả lời được chấp nhận là không hoàn toàn đúng Tôi không nghĩ rằng, bạn cần phải xử lý chuỗi sau gọi addPercentEscapesAndReplaceAmpersand

+ (NSString *) addPercentEscapesAndReplaceAmpersand: (NSString *) stringToEncode 
{ 
    NSString *encodedString = [stringToEncode stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
    return [encodedString stringByReplacingOccurrencesOfString: @"&" withString: @"%26"]; 
} 
+4

vâng, nhưng điều đó sẽ phá hỏng âm điệu! – lol

+2

Điều đó không đúng nếu bạn xây dựng một chuỗi truy vấn như? Foo = bar & bar = foo và sau đó thay thế tất cả & s bằng% 26, nó không phải là chuỗi truy vấn hợp lệ nữa. –

+4

Bạn sẽ muốn xử lý giá trị thanh và foo thay vì chuỗi truy vấn toàn bộ. – s1mm0t

Các vấn đề liên quan