[iOS]iOS 中的 url 編碼問題

來源:互聯網
上載者:User

[iOS]iOS 中的 url 編碼問題

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

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

- (NSString *)encodeToPercentEscapeString: (NSString *) input{    // Encode all the reserved characters, per RFC 3986    // (<http://www.ietf.org/rfc/rfc3986.txt>)    NSString *outputStr = (NSString *)     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,                                            (CFStringRef)input,                                            NULL,                                            (CFStringRef)@"!*'();:@&=+$,/?%#[]",                                            kCFStringEncodingUTF8);    return outputStr;}- (NSString *)decodeFromPercentEscapeString: (NSString *) input{    NSMutableString *outputStr = [NSMutableString stringWithString:input];    [outputStr replaceOccurrencesOfString:@"+"                               withString:@" "                                  options:NSLiteralSearch                                    range:NSMakeRange(0, [outputStr length])];    return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];}

測試代碼:

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

結果如下:

    >> original: http://search.google.com?keywords=($# it's {a*123})00!*'();:@&=+$,/?%#[]    >> 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    >> encoded2: http://search.google.com?keywords=($%23%20it's%20%7Ba*123%7D)00!*'();:@&=+$,/?%25%23%5B%5D    >> 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.