使用编码加号 (%2B) 创建 NSURL
我需要在 GET 请求中传递带有时区偏移量的时间戳,例如,
2009-05-04T11:22:00+01:00
这看起来像是接收 PHP 脚本的两个参数“2009-05-04T11:22:00”和“01:00”(我无法控制) 。
NSURL 不编码加号,但如果我使用字符串创建 NSURL
2009-05-04T11:22:00%2B01:00
我最终得到的网址包含:
2009-05-04T11:22:00%252B01:00
有什么想法可以保留我编码的加号或只是简单地阻止 NSURL 编码任何内容吗?
I need to pass a timestamp with a timezone offset in a GET request, e.g.,
2009-05-04T11:22:00+01:00
This looks like a two arguments "2009-05-04T11:22:00" and "01:00" to the receiving PHP script (over which I've no control).
NSURL doesn't encode plus signs, but if I make an NSURL using the string
2009-05-04T11:22:00%2B01:00
the url I end up with contains:
2009-05-04T11:22:00%252B01:00
Any ideas how I can preserve my encoded plus sign or just plain prevent NSURL from encoding anything?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
对我有用的是进行 UTF8 转换,然后用 %2B 替换 + 号:
What worked for me was doing the UTF8 conversion, then replacing the + sign with %2B:
该字符串应该是 URL 编码的。
这是一个可以帮助您的 NSString 类别:
NSString+Additions.h
NSString+Additions.m
The string should be URL encoded.
Here is a category for NSString that will help:
NSString+Additions.h
NSString+Additions.m
对要作为参数包含的文本使用
NSString
的stringByAddingPercentEscapesUsingEncoding:
方法。顾名思义,该方法将转换返回一个自动释放的字符串,其中包含接收者的 url 安全版本。
Use
NSString
'sstringByAddingPercentEscapesUsingEncoding:
method on the text you want to include as an argument.As its name implies, the method will convert return an auto-released string containing an url-safe version of the receiver.
我想我也可以提供我的解决方法作为答案,因为我认为原始问题没有一个好的解决方案。
加号 (+) 在 URL 中完全有效,因此我的解决方案是将时间转换为 GMT 并从字符串中删除时区/DST 偏移量。 我将把它作为练习留给读者来确定下面的 secondsFromGMT 的值,在我的例子中,它总是相同的,因为我只对网络服务器生成的时间戳感兴趣。
Thought I may as well provide my workaround as an answer, as I don't think there's a good solution to the original problem.
The plus sign (+) is completely valid in a URL, so my solution was to convert the time to GMT and remove the timezone/DST offset from the string. I'll leave it as an exercise for the reader to determine the value of secondsFromGMT below as, in my case, it's always the same because I'm only interested in timestamps generated by a web server.
使用 URLComponents (Swift 3) 时的解决方案:
Solution when using URLComponents (Swift 3):
使用以下代码对字符串进行编码
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,NULL,(CFStringRef)@"+",kCFStringEncodingUTF8);
这将对字符串的 + 进行编码,从而防止在 post 方法中发布数据时将 + 替换为 %2b
encode you string by using below code
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,NULL,(CFStringRef)@"+",kCFStringEncodingUTF8);
this will encode + of you string which will prevent replacement of + by %2b while posting data in post method
要获得编码加号 (%2B)(它适用于所有字符),请使用
CFURLCreateStringByAddingPercentEscapes
as并在代码中使用 as
To get encoded plus (%2B) (It works with all charcters) use
CFURLCreateStringByAddingPercentEscapes
asAnd use in your code as