此问题并非针对iOS
,但由于我正在iOS
开发应用程序,因此我看到了这个问题。
我将URL
创建为
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *transactionsUrl = [NSString stringWithFormat:@"%@/%@/%@/%i/%i?categoryGroup=%@",
appUrl, @"rest/transactions", [userDefaults valueForKey:kMemberId], year, month, [categoryGroup stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"getting transactions for URL:%@", transactionsUrl);
我的查询参数categoryGroup
可以是以下值之一
A & B
,B & C
,
我在`iOS客户端日志上看到的是
2014-12-31 21:38:44.654 myapp-ios[41275:70b] getting transactions for URL:https://myapp.com/rest/transactions/78f7f8a4-a8c9-454a-93a8-6633a1076781/2014/12?categoryGroup=A%20&%20B
但是在服务器上,我看到了
categoryGroup=A
因此服务器上未收到整个queryParameter。
可能是什么潜在问题?
答案 0 :(得分:0)
答案 1 :(得分:0)
&
分隔GET参数。从技术上讲,您在服务器上看到categoryGroup
= "A "
(" A"后跟空格)。
潜在的问题是stringByAddingPercentEscapesUsingEncoding
并没有逃脱应该做的事情(并且确实逃脱了它不应该做的事情),例如&
。
改为使用CFURLCreateStringByAddingPercentEscapes
,this answer
NSString *encodedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8));