web-dev-qa-db-ja.com

iOSでURLデコードする方法-Objective C

StringByReplacingPercentEscapesUsingEncodingメソッドは、%文字、つまり+文字で始まらない特別なシンボルをデコードしていないため、正しく機能していません。 iOSでこれを行うより良い方法を知っている人はいますか?

私が現在使用しているものは次のとおりです。

NSString *path = [@"path+with+spaces"
     stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

次に、出力の例を示します。

path + with + spaces

29
VinnyD
NSString *path = [[@"path+with+spaces"
    stringByReplacingOccurrencesOfString:@"+" withString:@" "]
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

スペースのプラス置換は、application/x-www-form-urlencodedデータ(URLのクエリ文字列部分、またはPOST要求の本文)でのみ使用されることに注意してください。

51
rob mayoff
// Decode a percent escape encoded string.
- (NSString*) decodeFromPercentEscapeString:(NSString *) string {
return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                        (__bridge CFStringRef) string,
                                                        CFSTR(""),
                                                        kCFStringEncodingUTF8);
} 

http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

これは、「どうやら」これは「バグ」であるためです。Appleは認識していますが、まだ何もしていません...( http:/ /simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/

20
delux247

プラス記号をパーセントエスケープで置き換えようとしている場合は、「+」から「」(単一スペース)への文字列置換を実行します。次に、stringByAddingPercentEscapesUsingEncoding:を使用して、パーセントエスケープを追加します。

プラス記号は、エンコードされない多くの予約済みURL文字の1つです。

stringByReplacingPercentEscapesUsingEncoding:はエスケープのパーセントをデコードします)

2
Evan Mulawski

スイフト2:

extension String  {

    func uriDecodedString() -> String? {
       return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
    }

}
1
Mojtabye

また、CocoapodsのPercentEncoderライブラリを使用できます。

Swift 4

  • ライブラリをPodfileに含めます。

    ポッドPercentEncoder

  • ライブラリPercentEncoderをインポートします

    PercentEncoderをインポート

    クラスViewController {

    ...

    }

  • 「+」文字を「%20」に置き換え、「ped_decodeURI」メソッドを使用します

    "path + with + spaces" .replacingOccurrences(of: "+"、with: "%20")。ped_decodeURI()

「スペースのあるパス」を返します

ここに参照用リンク: https://cocoapods.org/pods/PercentEncoder

0
Fernando Perez