1

IPhone クライアントからサーバーにデータを送信しようとしています。ほとんどの値で問題なく動作しますが、「IPhone+Cocoa」のような文字列を送信しようとすると、サーバーは文字列を「IPhone Cocoa」と表示します。私はそれをグーグルで検索しようとしましたが、成功しなければ、それを行う理由はありません。

これが私のコードです

-(void)sendRequestNSString *)aRequest {

NSMutableURLRequest *request =
     [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kURLRequest]];

NSString *httpBody = 
[NSString stringWithFormat:@"%@=%@",
[requestString stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding], 
[aRequest stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding]];

NSData *aData = [httpBody dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:aData];
[request setHTTPMethod:@"POST"];

self.feedURLConnection = 
       [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

これの解決策を見つけるのに本当に苦労しています。これはバグですか、それともコードのどこかが間違っています。これを行う別の方法はありますか

4

1 に答える 1

4

-[NSString stringByAddingPercentEscapesUsingEncoding:]パラメータ値のエンコードには使用しないでください。特定の特殊文字 (+、& など) はエンコードされずに残されます (URL をエンコードする場合と同様)。

以下を使用します。

NSString *escapedParameter = [(NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  (CFStringRef)unescapedParameter, NULL,  CFSTR("?=&+"), kCFStringEncodingUTF8) autorelease];

ほどきれいではありませんstringByAddingPercentEscapesUsingEncoding:が、このためのマクロを簡単に作成できます。

http://arstechnica.com/apple/news/2009/01/iphone-dev-building-proper-mailto-urls.arsは、1 月に mailto: URLs to send to の構築で同様の問題を発見したときに書き上げられました-[UIApplication openURL:]

NB スタック オーバーフローへようこそ! FAQを読み、質問に対する承認済みの回答をマークすることを忘れないでください (もちろん、承認する価値のある適切な回答である場合)。

于 2009-11-28T06:51:36.627 に答える