带有变量的NSURL中的空格不会加载

时间:2011-04-30 23:59:27

标签: iphone objective-c ios4

大家好 我有一个客观的困境: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:@“公告%@%d example.ashx”]];

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

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

感谢任何帮助!

感谢您的时间

-Kyle

4 个答案:

答案 0 :(得分:8)

每当NSURL在init之后返回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];

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

此外,http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx是无效的网址。不属于转义的百分号(例如,不属于%20的一部分)必须自己编码为%25。从技术上讲,@也应该被转义(如%40),但是IIRC NSURL会放弃。{/ p>