iOS文字列符号化と復号化方法の実装と呼び出し(UrlEncode/UrlDecode)

3485 ワード

1.本符号化方法の機能説明

  • UrlEncodeメソッドは、任意のパラメータをURLに配置するのに適した文字列に変換します.具体的なルール:
  • 文字、数字、ハイフンは変更されません.
  • スペースをプラスに変換します.
  • 他のすべての文字はパーセンテージで表され、文字の2桁の16進符号化が接続されるように変換されます.例えば%2 F
  • UrlDecode法その機能は符号化とは逆
  • である.

    2.文字列の符号化前以降の効果


    元の文字列:
    Vk/nQmguwJIN
    

    エンコード後:
    Vk%2FnQmguwJIN
    

    復号後:
    Vk/nQmguwJIN
    

    3.UrlEncode/UrlDecodeメソッドの実装


    エンコーディング
    +(NSString*)encodeString:(NSString*)unencodedString{
        
        // CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
        // CharactersToLeaveUnescaped = @"[].";
        
        NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                  (CFStringRef)unencodedString,
                                                                  NULL,
                                                                  (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                  kCFStringEncodingUTF8));
        
        return encodedString;
    }
    

    デコード
    //URLDEcode
    +(NSString *)decodeString:(NSString*)encodedString
    
    {
        //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
        
        NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
        return decodedString;
    }
    

    4.使用上の推奨事項


    自分でCategoryを書くことをお勧めします.例えば、NSStringに基づいて、NSString+URLEncodingというクラス名のURLEncodingカテゴリファイルを新規作成することができる.hとNSString+URLEncoding.m.次に、必要な場所にヘッダファイルをインポートすればいいです.対照的に、上記の実装とは異なり、以下ではreplaceOccurrencesOfString:メソッドを用いて復号機能を実現する.
    そのうち:NSString+URLEncoding.h
    #import 
    
    @interface NSString (URLEncoding)
    
    //  
    - (NSString*)urlEncodeString;
    
    //  URL 
    - (NSString *)decodeFromPercentEscapeString;
    
    @end
    

    NSString+URLEncoding.m
    #import "NSString+URLEncoding.h"
    
    @implementation NSString (URLEncoding)
    
    //  
    - (NSString *)urlEncodeString
    {
        NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR(":/?#[]@!$&’(){}<>*+,;="),kCFStringEncodingUTF8));
        return result;
    }
    
    //  URL 
    - (NSString *)decodeFromPercentEscapeString
    {
        NSMutableString *outputStr = [NSMutableString stringWithString:self];
        [outputStr replaceOccurrencesOfString:@"+"
                                   withString:@" "
                                      options:NSLiteralSearch
                                        range:NSMakeRange(0, [outputStr length])];
        
        return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    }
    

    5.呼び出し例


    呼び出し先のクラス
    #import "NSString+URLEncoding.h"
    

    次に、上記のメソッドを呼び出します.
    [testStr urlEncodeString];
    

    できます.

    参考文献

  • http://blog.csdn.net/qwerty123501029/article/details/7092077
  • http://blog.csdn.net/typingios/article/details/9136005
  • http://blog.csdn.net/bianhuanshizhe/article/details/46953155