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.

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.