2012-04-10 5 views
7

Tengo una aplicación donde presiono un botón y paso el método api de mi servidor que llama al método de publicación JSON y guarda datos en la base de datos del servidor. Aquí estoy guardando mi número de móvil y emergencia no a la base de datos del servidor.Mi número de móvil está en formato de cadena.En mi variable de cadena de número de móvil, mi número de móvil se está guardando, que está en este formato '+ 90-9491491411'. Estoy ingresando + y luego código y luego- y luego numere pero cuando envío a la base de datos del servidor estoy eliminando el - y enviando el no a la base de datos pero el problema está en mi base de datos del servidor + no se está ingresando el móvil al que estoy ingresando. ¿Cuál puede ser el problema? Estoy usando Método POST para enviar la solicitud. Este es mi códigoagregando + antes de usar% 2b usando la codificación url en iphone

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

    } 

} 

// En mi número de móvil y en la variable de número de emergencia, mi no está en este formato '+91986444711', pero cuando se ingresa el valor en la base de datos del servidor + se elimina. Lo que puede ser el problema.

+0

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

Respuesta

16

Desafortunadamente, NSString 's -stringByAddingPercentEscapesUsingEncoding: no convertirá el signo más (+) iniciar sesión en %2B porque el signo más es un personaje URL válida que se utiliza para consulta independiente parámetros. Lo que esto generalmente significa es que el servidor web lo convierte en un personaje de espacio.

La forma más fácil de reemplazar el signo más estaría utilizando NSString 's stringByReplacingOccurrencesOfString:withString: para reemplazar el + con %2B. Por ejemplo:

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

El signo más ("+") en la URL significa un espacio codificado ("") y lo más probable es que su servidor lo interprete como un espacio. Cambie el carácter más a% 2B en la cadena antes de publicarlo. Para obtener una solución completa sobre la codificación de URL, consulte esta publicación: http://madebymany.com/blog/url-encoding-an-nsstring-on-ios

+1

tengo echó un vistazo al enlace que ha publicado y es una excelente solución al problema. Sin embargo, tal como está, no sigue las Reglas de la política de administración de memoria. Devuelve un objeto retenido, pero el nombre del método no sugiere a la persona que llama que está tomando posesión del objeto. He dejado un comentario en la publicación del blog que sugiere que se agregue una liberación automática antes de que el método devuelva la cadena escapada de la URL. – mttrb

+0

¡genial! tiene toda la razón sobre el problema de la administración de la memoria y sobre la solución, no lo noté. – MrTJ

0

El signo más significa espacio en una solicitud posterior. Necesita convertir el más en un carácter de escape porcentual. La forma más sencilla de hacerlo es la siguiente:

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

Esto a su vez la + en %2b. Probablemente el servidor revertirá automáticamente la codificación por usted.

(Editado en línea con el comentario de mttrb)

+0

En realidad, esto deja el signo + como estaba. Un signo + es un carácter válido en una URL so -stringByAddingPercentEscapesUsingEncoding: no se le escapa. – mttrb

+0

@mttrb: Arrgh, tienes razón. Yo diría que la documentación de Apple es engañosa aquí. – JeremyP

Cuestiones relacionadas