UIApplication OpenUrl双重转义我的网址

时间:2010-10-01 19:38:29

标签: iphone objective-c ipad safari

基本上,我正在尝试从我的应用程序中编写一个“tweet this”按钮。根据他们在应用程序中的位置,他们可以点击推文按钮,它会将它们发送到Safari,其中的推文消息会根据它们的位置而变化。

为了创建URL,我必须转义我想要放在NSUrl对象中的查询字符串。所以,我这样做:

NSString* escapedTweet = [@"Some String With Spaces" stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

连接基础之后,我的网址出现了“http://www.twitter.com/home/?status=Some&20String%20With%20Spaces” - 在调试器中查看它,这绝对是值(如预期的那样)。现在,我创建了我的URL并启动了safari:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escapedUrlString]];

但问题就出现了:OpenUrl似乎正在逃避我的百分号,所以Safari的实际网址是“http://www.twitter.com/home/?status=Some%2520String%2520With %2520Spaces“,这显然是一个问题,因为twitter创建状态消息为”Some%20String%20With%20Spaces“。

NSUrl不允许我创建一个包含空格的网址,所以我完全迷失了如何让我的网址只包含一个%20。有没有其他人遇到此问题或找到了解决方法?

我在拥有最新操作系统的iPad上运行,不确定它是否与iPhone上的问题相同。

编辑:简而言之,如何在不转义百分号并创建http://www.twitter.com/home/?status=Some%20Url%20With%20Spaces之类的网址的情况下让openUrl打开http://www.twitter.com/home/?status=Some%2520Url%2520With%2520Spaces

1 个答案:

答案 0 :(得分:0)

我假设escapedUrlString被声明为NSURL *escapedUrlString = [NSURL URLWithString:escapedTweet];。那么您的问题可能在openURL:[NSURL URLWithString:escapedUrlString]];,因为您正在获取一个URL,将其传递到另一个 URL然后打开它。通过传递escapedURLString(应该命名为“escapedURL”)而不是URLWithString:…来修复。