2009-11-28 2 views
1

내 아이폰 클라이언트에서 서버로 데이터를 보내려고합니다. 그것은 대부분의 값에 대해 잘 작동하지만 "IPhone + Cocoa"와 같은 문자열을 보내려고하면 서버가 문자열을 "IPhone Cocoa"로 표시합니다. 나는 그것을 성공시키지 않으면 서 그것을 시도하는 이유가있다.NSURLConnection을 가진 버그 .....?

여기에 내 코드

-(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

-[NSString stringByAddingPercentEscapesUsingEncoding:]은 매개 변수 값 인코딩에 사용하면 안됩니다. 특정 특수 문자 (+, & 등)는 인코딩되지 않은 상태로 남겨 둡니다 (URL을 인코딩하는 경우와 같아야 함). stringByAddingPercentEscapesUsingEncoding:

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

로 꽤하지 않습니다,하지만 당신은 쉽게에 대한 매크로를 만들 수 :

를 사용하여 다음과 같습니다.

http://arstechnica.com/apple/news/2009/01/iphone-dev-building-proper-mailto-urls.ars mailto : URL을 구축 할 때 비슷한 문제가 발견되어 -[UIApplication openURL:]으로 전송되면서 1 월에 다시 작성되었습니다.

N.B. 스택 오버플로에 오신 것을 환영합니다! FAQ을 읽고 질문에 대한 대답을 표시하는 것을 잊지 마십시오 (물론 받아 들일만한 가치있는 답변 일 경우).

+0

이것은 나를 위해 일했습니다. 감사. 나는 autorelease를 제거해야했다. –

관련 문제