URL codifica la cadena en iOS fallando
-
26-10-2019 - |
Pregunta
Estoy tratando de codificar una cadena en mi aplicación iOS 5 usando ARC.
Así es como lo hago:
- (NSString *)escape:(NSString *)text
{
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)text, NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
}
Luego lo llamo con datos de prueba como este:
NSLog([self escape:@"kalel///&&&???"]);
Pero la salida que obtengo del NSLog
Es esto:
kalel0.0000000.0000000.00000022623F0.0000000.000000
Eso simplemente no parece correcto, pero no importa lo que no pueda hacerlo bien
Solución
Su escape
la función está bien. El problema es de una manera que llamas NSLog
:
escape
produce la cadena kalel%2F%2F%2F%26%26%26%3F%3F%3F
para su aporte. NSLog
Interpreta esta cadena como una cadena de formato e imprime un poco de basura como números de punto flotante justo después kalel
¡palabra!
Siempre debes llamar NSLog
con una cadena constante como primer argumento, por ejemplo:
NSLog(@"%@", [self escape:@"kalel///&&&???"]);
PD Tienes una fuga de memoria en escape
--- debería return (__bridge_transfer NSString *)
A medida que transfiere el objeto CF retenido al espacio C Objetivo C.