29

stringByReplacingPercentEscapesUsingEncoding 方法无法正常工作,因为它不解码不以 % 字符(即 + 字符)开头的特殊符号。有谁知道在 iOS 中执行此操作的更好方法?

这是我目前正在使用的:

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

这是一个输出示例:

路径+带+空格

4

5 回答 5

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

请注意,加空格替换仅用于application/x-www-form-urlencoded数据中 - URL 的查询字符串部分或POST请求的正文。

于 2011-10-27T18:17:37.687 回答
20
// 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

这似乎是首选方式,因为......“显然”这是苹果意识到的一个“错误”,但他们还没有做任何事情......(http://simonwoodside.com/weblog/2009 /4/22/how_to_really_url_encode/ )

于 2012-05-21T19:41:19.507 回答
2

如果您尝试用百分比转义符替换加号,请执行从“+”到“”(单个空格)的字符串替换。然后使用stringByAddingPercentEscapesUsingEncoding:添加百分比转义。

加号是许多从未编码的保留 URL 字符之一。

stringByReplacingPercentEscapesUsingEncoding:解码百分比转义)

于 2011-10-27T18:14:04.053 回答
1

迅速2:

extension String  {

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

}
于 2016-01-30T13:09:20.043 回答
0

您也可以使用 Cocoapods 的 PercentEncoder 库。

斯威夫特 4

  • 将库包含到您的 Podfile 中:

    pod PercentEncoder

  • 导入库 PercentEncoder

    导入百分比编码器

    类视图控制器{

    ...

    }

  • 将“+”字符替换为“%20”并使用方法“ped_decodeURI”

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

它将返回“带空格的路径”

这里的链接供参考:https ://cocoapods.org/pods/PercentEncoder

于 2018-07-07T18:06:35.980 回答