问题
Previously, I was having a problem in posting special characters to web service. But now, I can POST all special characters except "?" which I do not understand why.
NSString+URLEndoding.h
@interface NSString (NSString_URLEncoding) //originally NSOBject
- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding;
- (NSString *)urlEncode;
@end
NSString+URLEndoding.m
@implementation NSString (NSString_URLEncoding)
- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding {
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(__bridge CFStringRef)self,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]"),
encoding));
}
- (NSString *)urlEncode {
return [self urlEncodeUsingEncoding:kCFStringEncodingUTF8];
}
@end
Below are some part of UpdateSomething.m:
NSString *encodeSomething = [something urlEncode];
NSMutableString *post = [NSMutableString stringWithFormat:@"something=%@", encodeSomething];
//NSLog(@"post: %@", post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
//NSLog(@"PostData: %@", postData);
NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding]; //UTF8 also works.
NSLog(@"check string = %@", check);
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:strURLQueryString]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSURLResponse *response;
NSError *err=nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
}
The output of check is:
check string = something%20%3F
I know that "%3F" = "?". But I do not understand why I get error whenever I key in question mark.
Response: Input Array does not match ?
Your assistance(s) are appreciated.
回答1:
I tried to do this again some time after I posted this question.
Previously, I used a web service that was written by someone else. I suspect it has something to do with some custom escaping character function.
This time, I wrote my own web service, and it works perfectly. I don't even need to use the "NSString_URLEncoding"
来源:https://stackoverflow.com/questions/18306224/how-to-post-question-mark-to-a-web-service-objective-c