Para Objective-C:
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
¿Dónde encontrar el conjunto para NSUTF8StringEncoding?
Hay juegos de caracteres predefinidos para los seis componentes y subcomponentes de URL que permiten la codificación porcentual. Estos juegos de caracteres se pasan a -stringByAddingPercentEncodingWithAllowedCharacters:
.
// Predefined character sets for the six URL components and subcomponents which allow percent encoding. These character sets are passed to -stringByAddingPercentEncodingWithAllowedCharacters:.
@interface NSCharacterSet (NSURLUtilities)
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
@end
El mensaje de desaprobación dice (el énfasis es mío):
En su lugar, use stringByAddingPercentEncodingWithAllowedCharacters (_ :), que siempre usa la codificación UTF-8 recomendada y que codifica para un componente o subcomponente de URL específico, ya que cada componente o subcomponente de URL tiene diferentes reglas sobre qué caracteres son válidos.
Por lo tanto, solo necesita proporcionar un NSCharacterSet
argumento adecuado . Afortunadamente, para las URL hay un método de clase muy útil llamado URLHostAllowedCharacterSet
que puede usar así:
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
Sin embargo, tenga en cuenta que:
Este método está diseñado para codificar en porcentaje un componente de URL o una cadena de subcomponentes, NO una cadena de URL completa.
NSURLComponents
, que puede manejar la codificación porcentual por usted.