[英]iOS Swift how to use a string containing %2 in a NSURL?
我对使用Web服务和一般编码非常陌生。 因此,如果我没有任何道理,请告诉我。
我正在使用两种方法来构造用于调用flickr API的URL。 一切正常,我唯一无法做的就是在URL中使用“%2Curl_m”参数。 构造URL后,“%2Curl_m”将变为“%252Curl_m”。
我已经尝试过Google并在这里搜索,但没有找到答案。 唯一接近的是它可能与字符串编码有关。 我已经看过文档,但是我真的没有多大意义。
我正在使用这两种方法来构造url:
private class func flickrURL(method method: Method, page:Int,
parameters: [String:String]?) -> NSURL {
let components = NSURLComponents(string: baseURLString)!
var queryItems = [NSURLQueryItem]()
let baseParams = [
"method": method.rawValue,
"format": "json",
"nojsoncallback": "1",
"api_key": APIKey,
"text": "car",
"per_page": "50",
"page": String(page)
]
for (key, value) in baseParams {
let item = NSURLQueryItem(name: key, value: value)
queryItems.append(item)
}
if let additionalParams = parameters {
for (key, value) in additionalParams {
let item = NSURLQueryItem(name: key, value: value)
queryItems.append(item)
}
}
components.queryItems = queryItems
print(components.URL!)
return components.URL!
}
private static var nextPage = 0
class func recentPhotosURL() -> NSURL {
nextPage += 1
print(nextPage)
let curl = "%2Curl_m"
print(curl)
return flickrURL(method: .RecentPhotos, page: nextPage,
parameters: ["extras": "\(curl),url_h,date_taken"])
}
我得到的网址是:
https://api.flickr.com/services/rest?page=2&text=car&api_key=XXXXXXXXXXXXXXXXXXX&method=flickr.photos.search&per_page=50&format=json&nojsoncallback=1&extras=%252Curl_m,url_h,date_taken
我需要的网址是:
https://api.flickr.com/services/rest?page=2&text=car&api_key=XXXXXXXXXXXXXXXXXXX&method=flickr.photos.search&per_page=50&format=json&nojsoncallback=1&extras=%2Curl_m,url_h,date_taken
这3行:
let curl = "%2Curl_m"
print(curl)
return flickrURL(method: .RecentPhotos, page: nextPage, parameters: ["extras": "\(curl),url_h,date_taken"])
快速浏览Flickr API会告诉我,这不是extras
参数中的有效值,它是url_m
。
%2C
是逗号( ,
)的百分比编码形式。 NSURLQueryItem
认为您的意思是字符串%2C
因此它将%
符号编码为%25
。 这就是您获取%252Curl_m
。
我不知道您在哪里拿了%2C
。 是否使用了网络工具并错误地包含了逗号?
将您的URL转换为字符串时,某些字符会被转义,例如%
转换为%25
,因此…
您可以使用stringByRemovingPercentEncoding
获得未转义的字符串。
print("%252".stringByRemovingPercentEncoding!) // prints "%2"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.