Tôi đã phải chuyển từ stringByAddingPercentEscapesUsingEncoding sang CFURLCreateStringByAddingPercentEscapes vì nó không thoát khỏi dấu chấm hỏi (?). Tôi rất tò mò những gì chính xác nó trốn thoát, và lý do đằng sau sự thoát từng phần vs RFC 3986.Các ký tự stringByAddingPercentEscapesUsingEncoding thoát là gì?
Trả lời
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.
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.
- 1. Các ký tự JSON và ký tự thoát
- 2. ký tự thoát
- 3. Ký tự Escape Bash "\ c" là gì?
- 4. Thoát ký tự $ trong các đoạn
- 5. Các ký tự \ x1a có nghĩa là gì:
- 6. Trình tự thoát cho & trong chuỗi ký tự trong web.config là gì?
- 7. Ký tự dòng mới là gì - '\ n'
- 8. JavaScript không thoát \ ký tự?
- 9. Thoát các chuỗi ký tự JavaScript trong các khung nhìn
- 10. Ký tự thoát "@" trong Android
- 11. Thuật toán đơn giản nhất để thoát khỏi một ký tự đơn lẻ là gì?
- 12. MSBuild - Viết các ký tự thoát cho các tập tin
- 13. Chiến lược ký tự thoát tốt nhất cho kết hợp Python/MySQL là gì?
- 14. Ký tự thoát cho Trình tạo biểu thức SSIS là gì?
- 15. Khi nào tôi cần phải thoát khỏi các ký tự trong bộ ký tự regex (trong [])?
- 16. Thoát các ký tự đặc biệt trong cmd
- 17. Các ký tự điều khiển không thoát trong NSJSONSerialization
- 18. Thoát ký tự HTML bằng UTF-8?
- 19. Cách tạo ra một loạt các ký tự là gì?
- 20. Ký tự null nhị phân là gì?
- 21. Ruby: Thoát các ký tự đặc biệt trong một chuỗi
- 22. Mã ký tự HTML 8203 là gì?
- 23. chuỗi thay thế trên ký tự thoát
- 24. Sử dụng REPLACE với các ký tự thoát trong phpMyAdmin
- 25. Chuỗi JSON và cách xử lý các ký tự thoát
- 26. Trình tự thoát C cho khoảng trống là gì?
- 27. Mã ký tự ASCII cho '-' là gì?
- 28. Ký tự unicode là gì?
- 29. Ký tự '`' được gọi là gì?
- 30. thoát các ký tự định dạng trong java String.format
Bây giờ tôi chỉ cần vài phút để đọc tài liệu đó ... :) –