ios 中的 URL 编码字符串失败

发布于 2024-12-26 03:18:36 字数 677 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巴黎盛开的樱花 2025-01-02 03:18:36

你的escape函数没问题。问题在于您调用 NSLog 的方式:

escape 生成字符串 kalel%2F%2F%2F%26%26%26%3F%3F%3F 作为您的输入。 NSLog 将此字符串解释为格式字符串,并在 kalel 单词之后将一些垃圾打印为浮点数!

您应该始终使用字符串常量作为第一个参数调用 NSLog,例如:

NSLog(@"%@", [self escape:@"kalel///&&&???"]);

PS 您在 escape 中出现内存泄漏 --- 您应该当您将保留的 CF 对象传输到 Objective C 空间时,return (__bridge_transfer NSString *)

Your escape function is fine. The problem is in a way you call NSLog:

escape produces the string kalel%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 after kalel word!

You should always call NSLog with a string constant as a first argument, e.g.:

NSLog(@"%@", [self escape:@"kalel///&&&???"]);

P.S. You have a memory leak in escape --- you should return (__bridge_transfer NSString *) as you transfer retained CF object to Objective C space.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文