28 Ago, 2012 16:56
UrlEncode para iOS
Todos sabemos que a classe NSString tem um método stringByAddingPercentEscapesUsingEncoding que trata o encode de uma url no iOS, porém ele é muito simples, pois só trata os caracteres conhecidos como ilegais em uma url.
Segue um exemplo utilizando o encode ISO-8859-1:
NSString *param = @"p@râmetro com alguns caractere$ esp&ciais!";
NSString *url = [NSString stringWithFormat:@"http://meuexemplo.com/index?param=%@",
[param stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]];
NSLog(url);
A saída será: http://meuexemplo.com/index?param=p@r%E2metro%20com%20alguns%20caractere$%20esp&ciais!
Pelo exemplo acima, fica claro que o método stringByAddingPercentEscapesUsingEncoding somente escapou os espaços e o "â". Se você precisar, como eu, escapar também caracteres legais, será preciso utilizar a função CFURLCreateStringByAddingPercentEscapes.
Primeiramente, crie a Category NSString+UrlEncode. Segue, abaixo, o código do método:
@implementation NSString (UrlEncode)
- (NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding));
}
@end
Agora, o mesmo exemplo só que utilizando a Category:
NSString *param = @"p@râmetro com alguns caractere$ esp&ciais!";
NSString *url = [NSString stringWithFormat:@"http://meuexemplo.com/index?param=%@",
[param urlEncodeUsingEncoding:NSISOLatin1StringEncoding]];
NSLog(url);
Já nesse exemplo o retorno foi: http://meuexemplo.com/index?param=p%40r%E2metro%20com%20alguns%20caractere%24%20esp%26ciais%21
Qualquer umas da opções apresentadas poderá ser utilizada, dependerá mais da sua necessidade.