2012-04-10 26 views
7

Bir düğmeyle JSON posta yöntemini çağıran ve veriyi sunucu veritabanına kaydederek sunucum api yöntemini geçirdiğim bir uygulama var. Mobil numaramı kaydediyorum ve acil durum no sunucu veritabanı.My cep telefonu numarası string formatında.Masa numaram değişkeni içinde, cep telefonu numaramın kaydedildiğini '+ 90-9491491411' olarak giriyorum. + giriyorum sonra kod ve sonra- ve sonra numarayı sunucu veritabanına gönderdiğimde - ve veritabanına veri gönderemiyorum ama sorun benim server veritabanımda + girdiğim cep telefonuna girmiyorum. Sorun ne olabilir. Kullanıyorum Isteği göndermek için POST yöntemi. Bu benim kodum+% 2b kullanmadan önce + url kodlama kullanarak% 2b ekleme

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

    } 

} 

// Mobil numaram ve emrgency number değişkenimde, no'm bu formatta '+91986444711' olur, ancak sunucu veritabanına değer girildiğinde + çıkarılır .Bu prob olabilir.

+0

http://stackoverflow.com/questions/7088079/how-to-pass-an-string-value-in-url-in-iphone-app/10054500#10054500 – dayitv89

cevap

16

Maalesef NSString 'ın -stringByAddingPercentEscapesUsingEncoding: artı işareti ayrı sorguya kullanılan geçerli bir URL karakter olduğu için artı (+) %2B oturum dönüştürmek olmaz parametreleri. Bu genellikle, web sunucusu tarafından bir boşluk karakterine dönüştürüleceği anlamına gelir.

kolay yolu

artı işareti %2B ile + yerine NSString 'ın stringByReplacingOccurrencesOfString:withString: kullanarak olurdu yerine. Örneğin:

mobileValue = [mobileValue stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"]; 
1

URL'deki artı işareti ("+"), kodlanmış bir alan ("") anlamına gelir ve büyük olasılıkla sunucunuz bunu bir alan olarak yorumlayacaktır. Göndermeden önce artı karakterini dizede% 2B olarak değiştirin. URL kodlamasıyla ilgili eksiksiz bir çözüm için şu yazıya bakın: http://madebymany.com/blog/url-encoding-an-nsstring-on-ios

+1

Ben ettik Gönderdiğiniz bağlantıya bir göz attı ve problem için mükemmel bir çözüm. Ancak, durduğu gibi, Bellek Yönetimi Politikası Kurallarına uymuyor. Tutulan bir nesneyi döndürür, ancak yöntem adı, arayan kişiye nesnenin sahipliğini aldığını önermez. Blog yayınında, yöntemin URL kaçtı dizesini döndürmesinden önce bir otomatik olarak eklenmesi gerektiğini öne süren bir yorum bıraktım. – mttrb

+0

harika! Bellek yönetimi sorunu ve çözüm hakkında tamamen haklısınız, farketmedim. – MrTJ

0

Artı işareti, posta isteğindeki boşluk anlamına gelir. Artıyı yüzde kaçış karakterine dönüştürmeniz gerekiyor. şöyle Bunu yapmanın en kolay yoludur:

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

Bu %2b içine + dönecek. Muhtemelen sunucu sizin için kodlamayı otomatik olarak tersine çevirecektir.

(mttrb yorumuna doğrultusunda Düzenlendi)

+0

Aslında, bu + işaretini olduğu gibi bırakır. A + işareti, URL'de geçerli bir karakter olduğundan, -stringByAddingPercentEscapesUsingEncoding: bundan kaçamaz. – mttrb

+0

@mttrb: Arrgh, haklısın. Apple'ın belgelerinin burada yanıltıcı olduğunu iddia ediyorum. – JeremyP