我正在向服务器NSMutableURLRequest
发送请求,如下所示,问题之一是电话号码并且带有“+”号的参数将被删除。
// Create the request.
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:myURL ]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30.0];
/**
add post
****/
[theRequest setHTTPMethod:@"POST"];
NSString *encodedfullNumberFinal= [ fullNumberFinal stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *append2URL=[NSString stringWithFormat:@"deviceType=%d&token=%@&mobileNumber=%@&code=%@",
1, token,
encodedfullNumberFinal
,myBid
];
[theRequest setHTTPBody:[append2URL
dataUsingEncoding:NSUTF8StringEncoding /*NSUnicodeStringEncoding*/]];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
receivedData = /*[*/[NSMutableData data] /* retain]*/;
} else {
// Inform the user that the connection failed.
}
注意,表单服务器端我正在使用Tomcat和Java 任何建议如何使用'+'符号保存参数?
答案 0 :(得分:5)
问题是标准stringByAddingPercentEscapesUsingEncoding
对加号没有做任何事情。尽管如此,核心基金会CFURLCreateStringByAddingPercentEscapes
可以让您获得更多控制权。我使用NSString
类别为CFURLCreateStringByAddingPercentEscapes
提供了一个简单的界面:
@implementation NSString (UrlEncode)
+ (NSString *)stringByAddingPercentEscapesFor:(NSString *)string
legalURLCharactersToBeEscaped:(NSString *)legalURLCharactersToBeEscaped
usingEncoding:(NSStringEncoding)encoding
{
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
NULL,
(CFStringRef)legalURLCharactersToBeEscaped,
CFStringConvertNSStringEncodingToEncoding(encoding)
));
}
- (NSString *)stringByAddingPercentEscapesFor:(NSString *)legalURLCharactersToBeEscaped
usingEncoding:(NSStringEncoding)encoding
{
return [NSString stringByAddingPercentEscapesFor:self
legalURLCharactersToBeEscaped:legalURLCharactersToBeEscaped
usingEncoding:encoding];
}
- (NSString *)stringByAddingPercentEscapesForURLParameterUsingEncoding:(NSStringEncoding)encoding
{
return [NSString stringByAddingPercentEscapesFor:self
legalURLCharactersToBeEscaped:@":/?@!$&'()*+,;="
usingEncoding:encoding];
}
@end
然后我可以使用stringByAddingPercentEscapesForURLParameterUsingEncoding
而不是stringByAddingPercentEscapesUsingEncoding
,加号也会被转义。
答案 1 :(得分:1)
Yap,在网址中,+
表示空格。您必须明确将其包含在要编码的字符列表中。
NSString *encodedfullNumberFinal = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef)fullNumberFinal,
CFSTR(""),
CFSTR("+"), // you may want to include more valid URL characters here too
kCFStringEncodingUTF8,
);