【问题标题】:Spaces in a NSURL with variables doesn't load带有变量的 NSURL 中的空格不会加载
【发布时间】:2011-04-30 23:59:26
【问题描述】:

大家好 我有一个客观 c 困境:P 我对objective-c很陌生,我曾尝试寻找答案,但无济于事。

所以,这是我的情况。 我现在将代码放在这里,否则它将没有多大意义。 我正在记下我需要的东西,这段代码现在不起作用,我稍后会解释原因

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM"];
NSString *monthString = [formatter stringFromDate:date];
NSLog(@"MONTH STRING %@", monthString);
NSString *baseURLStr = @"http://www.mysite.ca/example";
NSURL *url = [NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"announcements%20%@%20%d%20carson.ashx", monthString]];

[webView loadRequest:[NSURLRequest requestWithURL:url]];
[NSCalendar release];

所以,这就是问题所在... 编码 (HTML):stringByAppendingFormat:@"announcements%@%20%d%20example.ashx", monthString, day]];

解码后是这样的

stringByAppendingFormat:@"announcements %@ %d example.ashx"]];

这应该更容易理解.. 当我使用 %20 运行时,它显示“未找到请求的文档” 当我使用空格(“”)运行时,它只是白色的,没有加载。

我知道 URL 是正确的,如果我把变量取出来,这就是完全相同的问题,但是当我将 %20 移回 baseURLStr 时,它可以正常工作并且加载得很好,所以这是要做的事情使用 HTML 代码和“stringbyAppendingFormat”字符串。

感谢任何帮助!

感谢您的宝贵时间

-凯尔

【问题讨论】:

    标签: iphone objective-c ios4


    【解决方案1】:

    每当 NSURL 在初始化后返回 nil (0x0) 时,它几乎总是与不正确的 url 字符串相关。而且它对获取格式正确的字符串非常挑剔。

    我的建议是简单地构建你的字符串,没有任何转义或 url 编码,然后简单地调用

    myUrlString = [myUrlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
    

    这是它的标头声明

    - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc NS_AVAILABLE(10_3, 2_0);
    

    这样,我总是知道我得到了 NSURL 类想要的格式。

    这是一个例子

    NSString *sUrl = @"http://www.myside.ca/example/announcements carson.ashx"; //notice the embedded space
    sUrl = [sUrl stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
    NSURL *url = [NSURL URLWithString:sUrl];
    

    【讨论】:

    • 但是monthString呢:/
    • 给我看一个完整的 url 应该是什么样子的确切例子......没有任何编码......
    • 只需要注意当前的 url 字符串不包含任何百分比转义,否则会使 url 无效
    • @JasonCragun,谢谢!!你的回答帮助我解决了我的问题。但是,stringByAddingPercentEscapesUsingEncoding 自 iOS 9.0 起已弃用。我改用urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];,效果很好!
    【解决方案2】:

    如果我理解正确,您正在尝试生成一个嵌入文字“%20”的字符串。 “%”字符在格式字符串中是特殊的。如果要插入文字百分比字符,则需要通过放置两个连续的“%”来对其进行转义。喜欢

    [NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"foo%%20bar"]];
    

    这会将“foo%20bar”附加到字符串的末尾。

    【讨论】:

    • 我并没有尝试将 % 的 %20 用于空间似乎不像实际空间那样工作......
    【解决方案3】:

    您可能只需要编码百分号。试试看:stringByAppendingFormat:@"announcements%%20%@%%20%d%%20carson.ashx"]

    【讨论】:

    • 对。问题可能是stringByAppendingFormat: 正在吃掉你的 %20 中的百分号——如果是这样,你可以改用 %%20 来解决这个问题。
    【解决方案4】:

    如果您不使用 printf 样式的格式,请不要使用 stringByAppendingFormat:。请改用stringByAppendingString:

    其次,生成的 URL 真的应该是 http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx 吗?或者中间应该有一个斜线:http://www.myside.ca/example<b>/</b>announcements%20%@%20%d%20carson.ashx

    另外,http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx 是一个无效的 URL。不属于转义部分的百分号(例如,不属于%20)本身必须编码为%25。从技术上讲,@ 也应该被转义(如%40),但 IIRC NSURL 会让那个滑动。

    【讨论】:

    • 我在使用 String 时遇到语义问题。应该有一个斜线
    • 我忘了在代码中添加一个部分:/它的monthString部分
    猜你喜欢
    • 2010-11-29
    • 2023-01-24
    • 2016-04-08
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多