我向我的服务器发送一些字符串,它工作得非常好,但出于某种原因,当我尝试发送一个链接作为NSString时,它无法正确发送。
例如,NSString PDF_URL变量等于:
https://s3.amazonaws.com/the+PDFs/email%40hotmail.ca_product+name+is+something_the+keycode.PDF
在我的myRequestString
PDF_URL格式正确。但是,当我查看我的电子邮件(在我的情况下,我将网址发送到我的电子邮件)时,网址最终会像这样:
https://s3.amazonaws.com/the PDFs/email@hotmail.ca_product name is something_the keycode.PDF
我不知道为什么客观C会替换那些角色,但它会在POST到我的服务器时执行,因为我在发送检查变量并正确格式化之前就断点了。
我的代码:
-(void)sendPDFtoEmail{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
NSURL * url = [NSURL URLWithString:@"my url"];
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
NSString *PDF_URL = [NSString stringWithFormat:@"%@%@%@%@%@%@%@", @"https://s3.amazonaws.com/the+PDFs/", email, @"_", name, @"_", keycode, @".PDF"];
// Create your request string with parameter name as defined in PHP file
NSString *myRequestString = [NSString stringWithFormat:@"name=%@&email=%@&keycode=%@&PDF_URL=%@", Name, email, keycode, PDF_URL];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[myRequestString dataUsingEncoding:NSUTF8StringEncoding]];
NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Response:%@ %@\n", response, error);
if(error == nil)
{
NSString *response = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
}
}];
[dataTask resume];
}
也不是我的PHP,因为我在Android中将相同的字符串URL发送到同一个PHP,当我检查我的电子邮件时,链接没有格式化。
答案 0 :(得分:0)
好吧,当你将www-form-urlencode字符串空格转换为+
符号时(你可以在这里查看:http://www.url-encode-decode.com/)。因此,如果您想要实际传递+
符号,则需要先对字符串进行编码。似乎Android本身就是这样,而iOS则不然。这就是为什么你从这两个平台得到不同的结果。
这可以帮到你:
NSCharacterSet *allowedChars = [NSCharacterSet URLQueryAllowedCharacterSet];
NSString *PDF_URL = [NSString stringWithFormat:@"%@%@%@%@%@%@%@", @"https://s3.amazonaws.com/the+PDFs/", email, @"_", name, @"_", keycode, @".PDF"];
NSString *encodedPDF_URL = [PDF_URL stringByAddingPercentEncodingWithAllowedCharacters:allowedChars];
这篇维基百科文章也值得一读:https://en.wikipedia.org/wiki/Percent-encoding#The_application.2Fx-www-form-urlencoded_type
还值得检查文档,因为还有其他预定义的集合用于编码其他URL组件 - > https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/#//apple_ref/occ/clm/NSCharacterSet/URLQueryAllowedCharacterSet