【问题标题】:UIApplication OpenUrl double-escaping my URLsUIApplication OpenUrl 双重转义我的 URL
【发布时间】:2010-10-01 19:38:29
【问题描述】:

基本上,我正在尝试从我的应用程序内部编写一个“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 访问的实际 URL 是“http://www.twitter.com/home/?status=Some%2520String%2520With %2520Spaces”,这显然是一个问题,因为 twitter 将状态消息创建为“Some%20String%20With%20Spaces”。

NSUrl 不允许我创建一个带有空格的 URL,所以我完全不知道如何让我的 URL 只包含一个 %20。有没有其他人遇到过这个问题或找到了解决方法?

我在装有最新操作系统的 iPad 上运行,不确定 iPhone 上是否存在同样的问题。

编辑:简而言之,我如何让 openUrl 打开 http://www.twitter.com/home/?status=Some%20Url%20With%20Spaces 而不转义我的百分号并创建像 http://www.twitter.com/home/?status=Some%2520Url%2520With%2520Spaces 这样的 URL?

【问题讨论】:

  • 当你说“我的网址出来”时,你是指你的网址还是你的网址字符串?尝试做NSURL * url = [NSURL URLWithString:escapedUrlString]; 并打印它以查看它是否是 NSURL 而不是 OpenURL 进行转义。还要检查控制台日志;我认为 SpringBoard.app 打印正在打开的 URL。

标签: iphone objective-c ipad safari


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2012-08-11
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多