7

ボタンをクリックすると、JSONポストメソッドを呼び出してデータをサーバーデータベースに保存するサーバーAPIメソッドを渡すアプリケーションがあります.ここでは、携帯電話番号と緊急事態をサーバーデータベースに保存しています.私の携帯電話番号は文字列形式です.私の携帯電話番号文字列変数では、私の携帯電話番号は「+90-9491491411」という形式で保存されています. - データベースに no を送信しますが、サーバー データベースに問題があります + 入力しているモバイルが入力されていません。

-(void)sendRequest
{

    NSString *newstring = txtMobile.text;
    mobileValue = [newstring stringByReplacingOccurrencesOfString:@"-" withString:@""];
    NSLog(@"%@",mobileValue);



    NSString *newString1 = txtemergencyprovider.text;
    emergencyNumber = [newString1 stringByReplacingOccurrencesOfString:@"-" withString:@""];


        NSLog(@"%@",emergencyNumber);
    if ([txtEmail.text  isEqualToString:@""])
    {
        post = [NSString stringWithFormat:@"CommandType=new&ApplicationType=%d&FullName=%@&Mobile=%@&EmergencymobileNumber=%@&Latitude=%f&Longitude=%f&City=%@&MobileModel=Apple",applicationtype,txtFullname.text,mobileValue,emergencyNumber,latitude,longitude,txtCity.text];
        NSLog(@"%@",post);
    }
    else {
        post = [NSString stringWithFormat:@"CommandType=new&ApplicationType=%d&FullName=%@&Mobile=%@&EmergencymobileNumber=%@&Latitude=%f&Longitude=%f&City=%@&EmailAddress=%@&MobileModel=Apple",applicationtype,txtFullname.text,mobileValue,emergencyNumber,latitude,longitude,txtCity.text,txtEmail.text];
        NSLog(@"%@",post);
    }


    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
    NSLog(@"%@",postLength);
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:@"http://myapi?RequestType=NEW"]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (theConnection) {
        webData = [[NSMutableData data] retain];
        NSLog(@"%@",webData);
    }
    else 
    {

    }

}

//私の携帯電話番号と緊急番号の変数では、「+91986444711」という形式になっていますが、値がサーバー データベースに入力されると + が削除されます。

4

3 に答える 3

17

残念ながら、はプラス ( ) 記号を に変換しませんNSString。プラス記号はクエリ パラメータを区切るために使用される有効な URL 文字だからです。これは通常、Web サーバーによって空白文字に変換されることを意味します。 -stringByAddingPercentEscapesUsingEncoding:+%2B

プラス記号を置き換える最も簡単な方法は、 を使用してNSStringをにstringByReplacingOccurrencesOfString:withString:置き換えることです。例えば:+%2B

mobileValue = [mobileValue stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
于 2012-04-10T09:38:31.830 に答える
1

URL のプラス記号 ("+") は、エンコードされたスペース (" ") を意味し、サーバーはこれをスペースとして解釈する可能性が高くなります。投稿する前に、文字列内のプラス記号を %2B に変更してください。URL エンコーディングの完全なソリューションについては、次の投稿を参照してください: http://madebymany.com/blog/url-encoding-an-nsstring-on-ios

于 2012-04-10T08:52:30.443 に答える
0

プラス記号は、投稿リクエスト内のスペースを意味します。プラスをパーセントエスケープ文字に変換する必要があります。これを行う最も簡単な方法は次のとおりです。

NSString* escapedMobileValue = [mobileValue stringByReplacingOccurencesOfString: @"+" withString: @"%2b"];

これにより、 が に変わり+ます%2b。おそらく、サーバーが自動的にエンコードを逆にします。

(mttrbさんのコメントに合わせて編集)

于 2012-04-10T09:23:25.360 に答える