No iOS8 e anteriores, posso usar:
NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
no iOS9 stringByAddingPercentEscapesUsingEncoding
foi substituído por stringByAddingPercentEncodingWithAllowedCharacters
:
NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
e minha pergunta é: onde encontrar necessário NSCharacterSet
( NSUTF8StringEncoding
) para a substituição adequada de stringByAddingPercentEscapesUsingEncoding
?
fonte
NSURLComponents
, que pode lidar com codificação de porcentagem para você.NSURLComponents
(com cada componente codificado por cento com o correspondenteNSCharacterSet
) é o caminho certo a seguir.Para Objective-C:
onde encontrar definido para NSUTF8StringEncoding?
Existem conjuntos de caracteres predefinidos para os seis componentes e subcomponentes de URL que permitem codificação percentual. Esses conjuntos de caracteres são passados para
-stringByAddingPercentEncodingWithAllowedCharacters:
.A mensagem de suspensão de uso diz (ênfase minha):
Portanto, você só precisa fornecer um
NSCharacterSet
argumento adequado . Felizmente, para URLs, há um método de classe muito útil chamadoURLHostAllowedCharacterSet
que você pode usar assim:Esteja ciente, porém, que:
fonte
URLHostAllowedCharacterSet
é NÃO TRABALHAR PARA ME. Eu uso emURLFragmentAllowedCharacterSet
vez disso.OBJETIVO -C
SWIFT - 4
Os seguintes são conjuntos de caracteres úteis (invertidos):
fonte
+
. Portanto, os sinais de mais na string serão bagunçados se passados nos parâmetros de consulta - tratados como espaço `` no lado do servidor.Objective-C
este código funciona para mim:
fonte
Swift 2.2:
fonte
Para Swift 3.0
Você pode usar
urlHostAllowed
characterSet.fonte
Isso significa que você não deve codificar o
https://xpto.example.com/path/subpath
do url, mas apenas o que vem depois do?
.Suposto, porque há casos de uso para fazer isso em casos como:
Onde
xxxxx
está um URL totalmente codificado.fonte
Adicionando à resposta aceita. Levando em consideração esta nota
todo o URL não deve ser codificado:
fonte