iOS 中的 url 編碼問題

來源:互聯網
上載者:User

[iOS]iOS 中的 url 編碼問題

NSString 的stringByAddingPercentEscapesUsingEncoding 可以對 url 參數進行編碼,但是有點小問題,不會對所有需要編碼的字元都編碼。我們可以通過 CFStringRef 的

CFURLCreateStringByAddingPercentEscapes 函數來封裝這個功能。代碼如下:

Cpp代碼 

  1. - (NSString *)encodeToPercentEscapeString: (NSString *) input  
  2. {  
  3.     // Encode all the reserved characters, per RFC 3986  
  4.     // (<http://www.ietf.org/rfc/rfc3986.txt>)  
  5.     NSString *outputStr = (NSString *)   
  6.     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
  7.                                             (CFStringRef)input,  
  8.                                             NULL,  
  9.                                             (CFStringRef)@"!*'();:@&=+$,/?%#[]",  
  10.                                             kCFStringEncodingUTF8);  
  11.     return outputStr;  
  12. }  
  13.   
  14. - (NSString *)decodeFromPercentEscapeString: (NSString *) input  
  15. {  
  16.     NSMutableString *outputStr = [NSMutableString stringWithString:input];  
  17.     [outputStr replaceOccurrencesOfString:@"+"  
  18.                                withString:@" "  
  19.                                   options:NSLiteralSearch  
  20.                                     range:NSMakeRange(0, [outputStr length])];  
  21.   
  22.     return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  23. }  


測試代碼:

Cpp代碼 

  1. NSString * testUrl      = @"http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[]";  
  2. NSLog(@"original: %@", testUrl);  
  3.   
  4. NSString * encodeStr    = [self encodeToPercentEscapeString:testUrl];  
  5. NSLog(@"encoded: %@", encodeStr);  
  6.   
  7. NSString * encodeStr2   = [testUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  8. NSLog(@"encoded2:%@", encodeStr2);  
  9.   
  10. NSString * decodeStr    = [self decodeFromPercentEscapeString:encodeStr];  
  11. NSLog(@"decoded: %@", decodeStr);  


結果如下:

Cpp代碼 

  1. >> original: http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[]  
  2. >> encoded:  http%3A%2F%2Fsearch.google.com%3Fkeywords%3D%28%24%23%20it%27s%20%7Ba%2A123%7D%2900%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%25%23%5B%5D  
  3. >> encoded2: http://search.google.com?keywords=($%23%20it's%20%7Ba*123%7D)00!*'();:@&=+$,/?%25%23%5B%5D  
  4. >> decoded:  http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[]  

轉帖自:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.