ios 中的 URL 编码字符串失败
我正在尝试使用 ARC 对 iOS 5 应用程序中的字符串进行 url 编码。
这就是我这样做的方法:
- (NSString *)escape:(NSString *)text
{
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)text, NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
}
然后我用这样的测试数据来调用它:
NSLog([self escape:@"kalel///&&&???"]);
但是我从 NSLog 得到的输出是这样的:
kalel0.0000000.0000000.00000022623F0.0000000.000000
这看起来不太正确,但无论如何我都不能做对
I am trying to url encode a string in my iOS 5 app using ARC.
This is how i do it:
- (NSString *)escape:(NSString *)text
{
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)text, NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
}
I then call it with test data like this:
NSLog([self escape:@"kalel///&&&???"]);
But the output i get from the NSLog
is this:
kalel0.0000000.0000000.00000022623F0.0000000.000000
That just does not seem right, but no matter what I can't get it right
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的
escape
函数没问题。问题在于您调用 NSLog 的方式:escape
生成字符串kalel%2F%2F%2F%26%26%26%3F%3F%3F
作为您的输入。NSLog
将此字符串解释为格式字符串,并在kalel
单词之后将一些垃圾打印为浮点数!您应该始终使用字符串常量作为第一个参数调用
NSLog
,例如:PS 您在
escape
中出现内存泄漏 --- 您应该当您将保留的 CF 对象传输到 Objective C 空间时,return (__bridge_transfer NSString *)
。Your
escape
function is fine. The problem is in a way you callNSLog
:escape
produces the stringkalel%2F%2F%2F%26%26%26%3F%3F%3F
for your input.NSLog
interprets this string as a format string and prints some garbage as floating point numbers right afterkalel
word!You should always call
NSLog
with a string constant as a first argument, e.g.:P.S. You have a memory leak in
escape
--- you shouldreturn (__bridge_transfer NSString *)
as you transfer retained CF object to Objective C space.