0

我有一个给出路径的字符串,还有一个将参数附加到它的字符串。当我把它们放在一个字符串中并显示时,我得到了正确的格式。如果我尝试将整个字符串放在 NSURL 中,它会显示 NULL。获取它的格式是什么?

  NSString *booking=urlForBooking.bookHall;
  NSLog(@" book %@",booking);   // this prints ---    http://10.2.0.76:8080/ConferenceHall/BookingHallServlet

  NSString *bookingString=[booking stringByAppendingString:[NSString stringWithFormat:@"?       employeeId=%@&conferenceHallId=%@&bookingId=%d&purpouse=%@&fromDate=%@&toDate=%@&comments=%@&submit=1",empId,_hallId,_bookingId,_purpose,fromDateStr,toDateStr,_comments]];
  NSLog(@"book str %@",bookingString);  //this prints ---   ?employeeId=3306&conferenceHallId=112&bookingId=0&purpouse=S&fromDate=25/Feb/2013 13:29&toDate=25/Feb/2013 15:29&comments=C&submit=1

  NSURL *bookingURL=[NSURL URLWithString:bookingString];
  NSLog(@"BOOK %@",bookingURL);  //here I'm not getting the url(combined string), it gives null.
4

3 回答 3

3

这是因为您正在构建的 URL 包含在 URL 中无效的章程,例如空格和斜杠。

您应该转义这些字符:

NSString *bookingPath =[bookingString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *bookingURL=[NSURL URLWithString:bookingPath];

您可能需要替换日期中的斜杠,因为它们的编码可能不正确。

NSString *bookingString=[NSString stringWithFormat:@"%@?employeeId=%@&conferenceHallId=%@&bookingId=%d&purpouse=%@&fromDate=%@&toDate=%@&comments=%@&submit=1",
          booking,
          empId,
          _hallId,
          _bookingId,
          [_purpose stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
          [fromDateStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
          [toDateStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
          [_comments stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURL *bookingURL=[NSURL URLWithString:bookingString];
NSLog(@"BOOK %@",bookingURL); 
于 2013-02-11T08:20:27.093 回答
1

您的 URL 字符串在某些方面不正确,因此被解析为 nil。NSURL的文档告诉你这可能发生:

返回值 一个用 URLString 初始化的 NSURL 对象。如果字符串格式错误,则返回 nil。

您不应该在?您的 URL 部分之后有所有这些前导空格,并且在将其解析为 URL 之前需要对整个内容进行转义。

于 2013-02-11T08:21:19.577 回答
0

_ bookingString_ 中的空格(在employeeId 之前和日期中)会终止您的URL。

于 2013-02-11T08:26:42.810 回答