zoukankan      html  css  js  c++  java
  • iOS下URL编码

    使用NSString默认的URL编码,会对汉字等进行转义,但是对=+等这些字符不会进行转义

    所以要手动实现这些字符的转义

    - (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!*'();:@&=+$,/?%#[] 

    转自:http://blog.csdn.net/kesalin/article/details/6678939

  • 相关阅读:
    [BZOJ 1698] 荷叶池塘
    [BZOJ 3132] 上帝造题的七分钟
    [JLOI2011] 飞行路线
    [Codeforces Round49F] Session in BSU
    [BZOJ 3036] 绿豆蛙的归宿
    CRC-16校验原理
    ubuntu下mysql的安装与配置
    【OpenCV】边缘检测:Sobel、拉普拉斯算子
    我对sobel算子的理解
    梯度算子(普通的+Robert + sobel + Laplace)
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/3951365.html
Copyright © 2011-2022 走看看