En iOS8 y anteriores puedo usar:
NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
en iOS9 stringByAddingPercentEscapesUsingEncoding
ha sido reemplazado por stringByAddingPercentEncodingWithAllowedCharacters
:
NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
y mi pregunta es: ¿dónde encontrar necesario NSCharacterSet
( NSUTF8StringEncoding
) para el reemplazo adecuado de stringByAddingPercentEscapesUsingEncoding
?
fuente
NSURLComponents
, que puede manejar la codificación porcentual por usted.NSURLComponents
(con cada componente codificado en porcentaje con el correspondienteNSCharacterSet
) es el camino correcto a seguir.Para Objective-C:
¿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:
.El mensaje de desaprobación dice (el énfasis es mío):
Por lo tanto, solo necesita proporcionar un
NSCharacterSet
argumento adecuado . Afortunadamente, para las URL hay un método de clase muy útil llamadoURLHostAllowedCharacterSet
que puede usar así:Sin embargo, tenga en cuenta que:
fuente
URLHostAllowedCharacterSet
se NO TRABAJO PARA MÍ. Yo usoURLFragmentAllowedCharacterSet
en su lugar.C OBJETIVO
SWIFT - 4
Los siguientes son conjuntos de caracteres útiles (invertidos):
fuente
+
. Por lo tanto, los signos más en la cadena se estropearán si se pasan en los parámetros de consulta, se tratarán como espacio `` en el lado del servidor.C objetivo
este código funciona para mí:
fuente
Swift 2.2:
fuente
Para Swift 3.0
Puede utilizar
urlHostAllowed
characterSet.fuente
Significa que no se supone que debe codificar el
https://xpto.example.com/path/subpath
de la URL, sino solo lo que va después del?
.Supuestamente, porque hay casos de uso para hacerlo en casos como:
¿Dónde
xxxxx
está una URL totalmente codificada?fuente
Añadiendo a la respuesta aceptada. Teniendo en cuenta esta nota
la URL completa no debe estar codificada:
fuente