0

次の方法でNSURLRequestを作成しました。

NSString *url=[NSString stringWithFormat:@"http://myserveradress.com/api/users/register?register_password=%@&register_password_confirm=%@&register_email=%@&register_terms=1&register_user=%@&process_registration=1&register_name=%@"
                   ,
                   [password stringByReplacingOccurrencesOfString:@" " withString:@"%"],[confirm stringByReplacingOccurrencesOfString:@" " withString:@"%"],[email stringByReplacingOccurrencesOfString:@" " withString:@"%"],[user stringByReplacingOccurrencesOfString:@" " withString:@"%"],[realName stringByReplacingOccurrencesOfString:@" " withString:@"%"]
                   ];
    NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    NSError *error;
    NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
    NSString *result_string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return result_string;

結果の文字列はhttp://myserveradress.ru/api/users/register?register_password=password&register_password_confirm=password&register_email=myname@mail.com&register_terms=1&register_user=myname&process_registration=1&register_name=Artem%Kulikovであり、エラー状態

Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x71e62b0 {NSUnderlyingError=0x71e6470 "bad URL", NSLocalizedDescription=bad URL}

ブラウザでは、リンクは正常に機能します。問題はアプリだけにあります。

4

2 に答える 2

14

これは文字列をエスケープする適切な方法ではありません。そのための方法がありstringByAddingPercentEscapesUsingEncoding:ます。したがって、次のように変更します。

NSString *url = [NSString stringWithFormat:@"http://myserveradress.com/api/users/register?register_password=%@&register_password_confirm=%@&register_email=%@&register_terms=1&register_user=%@&process_registration=1&register_name=%@"
                   , password, confirm, email, user, realName];
NSString *properlyEscapedURL = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:properlyEscapedURL]];

スペースの適切なエスケープコードは言うまでもあり%20ません%

于 2012-07-06T12:36:54.250 に答える
2

@ user1506704、register_nameのようなエンコード方式を使用していません。register_nameにスペースやその他の特殊文字がありますか?使用NSString方法 stringByAddingPercentEscapesUsingEncoding:.

次のURLを試してエスケープできます。

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding` 
于 2012-07-06T12:34:24.073 に答える