保存国际号码时不会添加+

时间:2013-10-28 12:49:25

标签: ios objective-c web-services nsurlconnection nsurlrequest

NSURL *url = [NSURL URLWithString:[[NSString stringWithFormat:@"www.mywebsite.com/setnumber.asmx?myNumber=%@", myNumber.text]
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

当我NSLog时,我会在下面看到

www.mywebsite.com/setnumber.asmx?myNumber=+96512345678

但是当我查看数据库时,我看不到+。我只看到号码为96512345678 知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

在网址中,+表示(空格)。为了传输角色,你必须对其进行URL编码。

不幸的是,您使用的方法不会对字符串进行足够的URL编码;相反,你需要这样的东西:

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
  NULL,
  (CFStringRef)unencodedString,
  NULL,
  (CFStringRef)@"!*'();:@&=+$,/?%#[]",
  kCFStringEncodingUTF8
);

解码使用

NSString *unencodedUrlString = [@"http://www.demo.com/2%2C7"
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];