iOS:URIの仕様のパーセンテージ符号化と復号化

3220 ワード

リファレンス

  • 公式文書
  • NSCharacter​Set
  • URI仕様のパーセンテージ符号化
  • URIとURL詳細
  • URI符号化について


    URIの仕様には「:」、「/」、「?」などの予約文字が定義されています.「&」,「=」,「@」,「%」などの文字は,URIにおいても彼の役割を果たす.要求パラメータにURIの書き込み予約文字を表す場合は、%文字の後に16進数の数値で8文字の数値を表す必要があります.
    たとえば、":"文字は3 Aで16進数で表されるので、%3 Aで表さなければなりません."/"文字は2 Fで16進数で表されるので、%%2 Fで"/"文字を表す必要があります.

    iOSでのアプローチ


    iOSでは、URIをstringByAddingPercentEncodingWithAllowedCharactersで符号化し、stringByRemovingPercentEncodingで復号することができる.
    stringByAddingPercentEncodingWithAllowedCharacters:
    stringByRemovingPercentEncoding
    例:
    NSString *urlStr = @"https://www.baidu.com";
    urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLUserAllowedCharacterSet]];
    NSLog(@" :%@",urlStr);
    urlStr = [urlStr stringByRemovingPercentEncoding];
    NSLog(@" :%@",urlStr);
    

    印刷結果:
    パーセンテージコード:https%3 A%2 F%2 F www.baidu.com復号化:https://www.baidu.com
    メソッド定義から、入力パラメータはNSCharacterSetオブジェクトであることがわかります.
    - (NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters;
    

    具体的なパラメータはNSCharacterSetの分類でNSURLUtilitiesが属性のフォーマットで外部に露出し、私たちはreadonlyしかできません.
  • URLUserAllowedCharacterSet
  • URLPasswordAllowedCharacterSet
  • URLHostAllowedCharacterSet
  • URLPathAllowedCharacterSet
  • URLQueryAllowedCharacterSet
  • URLFragmentAllowedCharacterSet

  • これにより、第1のURLUserAllowedCharacterSetは、全体のURLに対応する.その他の対応するURLの各部分.

    URLの構成

    URLは、インターネット上の任意のリソースを特定するための手段を提供し、これらのリソースは、異なる方法(HTTP/FT/STMTP)によってアクセスすることができる.いずれにしても、基本的には9つの部分から構成されています.
    ://:@:/;?#
  • schemeは、HTTP、FTPなどのリソースのプロトコルを取得する.
  • user:passwordユーザー名とパスワード、一般的な範囲のFTPリソースが必要です.
  • hostホスト名、アクセスしたホストは、IPであってもよいし、ホスト名であってもよい.
  • portポート番号は、HTTPのアクセスがデフォルトで80の場合は省略できます.
  • pathの上にはhost:postで私たちのホストが見つかりますが、ホストにはファイルが多いので、pathで特定のファイルの位置を特定する必要があります.
  • paramsこれは珍しく、主な役割は、サーバのように、今回の要求のいくつかの特性を表すための追加のパラメータを提供することです.例えばftp転送モードには2種類あり、バイナリとテキストがあります.テキスト形式でバイナリピクチャを転送したくないに違いありません.そうすれば、ピクチャをダウンロードしても見られないかもしれません.アプリケーションにより豊富な情報を提供するために、URLにはこのパラメータを表す専門的な部分があります.たとえばftp://file.xxx.com/pub/guid.pdf;type=dその中のtype=dはparams
  • である
  • queryがget方式で要求するパラメータ部分.例:http://www.xxx.com/index.html?username=wxx&password=123、username=wxx&password=123がquery
  • fragment htmlページが長い場合、通常はいくつかのセグメントに分けられ、あるセグメントにすばやくナビゲートできます.たとえばhttp://www.xxx.com/index.html#1,#1はその一部にすばやく位置決めできます.

  • 例:
        NSString *urlStr = @"https://www.xxx.com:8888/file/index.html?username=wxx&password=123#1";
        NSURL *url = [NSURL URLWithString:urlStr];
        NSLog(@"%@",url.scheme);
        NSLog(@"%@",url.host);
        NSLog(@"%@",url.port);
        NSLog(@"%@",url.path);
        NSLog(@"%@",url.query);
        NSLog(@"%@",url.fragment);
    

    印刷結果:
    https www.xxx.com
    8888/file/index.html username=wxx&password=123 1