2012-01-01 46 views

Trả lời

1

Một số loại tốt đã được tạo ra để làm chỉ là những gì bạn cần: http://iosdevelopertips.com/networking/a-better-url-encoding-method.html http://www.cocoanetics.com/2009/08/url-encoding/

Lý do để rời một số ký tự nằm ngoài tôi ... ngoại trừ việc nói rằng định nghĩa của hàm là: Returns a representation of the receiver using a given encoding to determine the percent escapes necessary to convert the receiver into a legal URL string.

Để hoàn toàn chính xác, + và & là các ký tự hợp pháp trong URL, trong khi một khoảng trắng thì không. Do đó phương pháp sẽ thoát đúng một khoảng trống, nhưng để lại + và & nguyên vẹn.

Đọc RFC2396 http://www.ietf.org/rfc/rfc2396.txt - có một bộ ký tự dành riêng và không được đặt trước được xác định. Tôi đoán là không có ký tự nào trong số này được thoát bởi stringByAddingPercentEscapesUsingEncoding.

+0

Bây giờ tôi chỉ cần vài phút để đọc tài liệu đó ... :) –

5

Cẩn thận không làm rò rỉ bộ nhớ khi chuyển đổi khi sử dụng CFStringRef. Đây là những gì tôi đã đưa ra để làm việc với các ký tự Latinh, và những người khác. Tôi sử dụng điều này để thoát khỏi các tham số của tôi, không phải toàn bộ URL. Tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể cần phải thêm hoặc xóa các ký tự khỏi "escapeChars"

CFStringRef escapeChars = (CFStringRef)@"%;/?¿:@&=$+,[]#!'()*<>¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ \"\n"; 

NSString *encodedString = (__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge_retained CFStringRef) url, NULL, escapeChars, kCFStringEncodingUTF8); 

Tôi hy vọng điều này sẽ hữu ích.

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