iOS : Comment faire le bon encodage d'URL?
Je ne suis pas en mesure d'ouvrir une URL dans UIWebView
j'ai donc seached & trouve que j'ai besoin de coder l'URL, donc j'ai essayé de coder, mais j'ai face à problème dans le codage d'URL : l'adresse de Ma page est http://somedomain.com/data/Témp%20Page%20-%20Open.html
(Ce n'est pas réel URL).
Je suis préoccupé par les %20
que j'ai essayé de remplacer à l'aide de stringByReplacingOccuranceOfString:@"" withString:@""
, à me donner l'URL que j'ai voulu comme http://somedomain.com/data/Témp Page - Open.html
Cependant pas d'ouverture dans UIWebView
, mais étonnamment, il s'ouvre dans Safari
& FireFox
parfait. Même que j'ai ouvert non encodée URL de son convertit automatiquement et ouvrez la page que je suis à la recherche d'.
J'ai google pour l'encodage de l'URL & c'points me à des résultats différents, j'ai déjà vérifié, mais aucun résultat, aidez-moi!! J'ai essayé différentes fonctions de réponses dans les différents codage d'URL question, mais il a juste changé tous les caractères spéciaux et faire mon URL comme, http%3A%2F%2Fsomedomain.com%2Fdata%2FT...
qui ne s'ouvre pas dans UIWebView
et même dans n'importe quel navigateur.
Il donne le Error Log
dans UIWebView delegate
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { }
Code D'Erreur : 101
& Description : Erreur de Domaine=WebKitErrorDomain Code=101 "L'opération ne pouvait pas être complété. (WebKitErrorDomain erreur 101.)" UserInfo=0x6e4cf60 {}
- L'URL ressemble, il est dans l'URL encodé au format déjà à l'exception de l'é-caractère qui doit probablement être codé en %c3%a9. Pourquoi cela fonctionne dans Safari, etc peut-être parce que les navigateurs de bureau est assez libérale avec des Url non valide et va essayer de les corriger pour vous, c'est à dire en supposant que les é doivent être codées dans l'URL.
- Si collez l'adresse URL dans le navigateur, il va convertir
%20
avecspace
et codent pasé
, de Sorte qu'il n'a aucun problème avec ça! - Ce que vous voyez dans la barre d'URL n'est pas toujours le même qui va être envoyé au serveur, autre navigateur actuel de l'adresse URL de différentes manières. Essayez cette httpdump.com/texis/browserinfo/Témp.html et note que "l'URI de la Demande" est "/texis/browserinfo/T%C3%A9mp.html".
- D'où vient l'URL viennent? Il semble être seulement partiellement échappé, qui est - franchement - de simples déchets d'entrée, et très difficile à travailler. Si vous ne spécifiez une URL réelle pour certains tests, il est encore plus difficile de trouver une réponse ici.
- Eh bien, la
URL
j'ai posté ici, j'ai seulement changé son nom de domaine (à somedomain.com) autre que son exactement le même que le vraiURL
. Cependant, avec un comportement étrange, il peut ouvrir avec les navigateurs dans monMAC PC
, aussi, je viens de vérifier sur Android (construit Dans le navigateur) & iPhone (safari) et sa fonctionne très bien. Il convertitURL
et ouvrir la page.URL
ressemblehttp://somedomain.com/data/mobile/index.html
. Ne sais pas quel est le problème avecUIWebView
. - Le problème est que ce n'est pas une URL valide. Il est à mi-chemin codé. L'é doit être échappé, mais les espaces sont déjà - et de s'échapper de nouveau juste coder ces % ainsi. Les navigateurs n'a probablement beaucoup de peaufinage pour obtenir plus de l'Url de droit que les gens jeter sur eux. Bien sûr, vous pouvez maintenant commencer à deviner et de peaufiner cette URL, mais vraiment, d'où tenez-vous que?
Vous devez vous connecter pour publier un commentaire.
J'ai fait quelques tests et je pense que le problème n'est pas vraiment avec le
UIWebView
mais plutôt queNSURL
ne pas accepter les URL en raison de l'é dans "Témp" n'est pas codé correctement. Ce sera la cause de+[NSURLRequest requestWithURL:]
et-[NSURL URLWithString:]
de retournil
que la chaîne de caractères contient une URL mal formée. Je suppose que vous ensuite à l'aide d'unnil
demande avec-[UIViewWeb loadRequest:]
qui n'est pas bon.Exemple:
De sortie:
Si vous avez vraiment vraiment envie d'emprunter la gestion appropriée des malformations Url WebKit a et ne veulent pas mettre en œuvre vous-même, vous pouvez faire quelque chose comme ça, mais c'est très laid:
La réponse @Dhaval Vaishnani condition est que partiellement correcte. Cette méthode traite la
?
,=
et&
caractères de ne pas être codé, car ils sont valides dans une URL. Ainsi, pour coder une chaîne de caractères arbitraire pour être utilisé en toute sécurité par une partie de l'URL, vous ne pouvez pas utiliser cette méthode. Au lieu de cela, vous devez revenir à l'utilisation d'CoreFoundation etCFURLRef
:N'oubliez pas de disposer de la propriété de la chaîne résultante à l'aide de
CFRelease(safeString);
.Aussi, il semble que malgré le titre, la COOP est à la recherche d' décodage et pas encodage une chaîne de caractères.
CFURLRef
a l'autre, semblable appel de fonction pour être utilisé pour:Encore une fois, n'oubliez pas de bonne gestion de la mémoire.
La façon la plus simple est d'utiliser:
iDhaval était proche, mais il l'a fait dans l'autre sens (de décodage à la place de l'encodage).
Anand façon dont pourrait fonctionner, mais vous aurez plus de chances d'avoir à les remplacer plus de caractères que d'espaces et de nouvelles lignes. Voir la référence est ici:
http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters
Espère que ça aide.
C'est très simple pour encoder l'URL de l'iPhone. C'est comme suivant
C'est un moyen idéal pour encoder l'URL, je l'utilise et il est parfaitement travailler avec moi.
Espère que ça va vous aider!!!
(null)
quand jeNSLog
url. Et l'url esthttp://somedomain.com/data/Témp%20Page%20-%20Open.html
+[NSString stringByReplacingPercentEscapesUsingEncoding:]
se comporte un peu étrange, voir ce billet de blog à madebymany.com/blog/url-encoding-an-nsstring-on-ios%3a
, par exemple, Cette méthode remplace ceux correspondant à caractère réservé. afin @user529758 a présent, c'est un décodage de la fonction.Cela peut être utile à quelqu'un qui est portée à cette question pour l'encodage de l'URL, comme ma question probablement différente qui a été résolu et accepté, c'est la façon dont j'ai utilisé pour faire de l'encodage,
Vous pouvez essayer ce
Je pense que cela fonctionnera pour vous
la méthode Native pour le Codage d'URL.
Vous avez probablement besoin de briser l'URL vers le bas dans ses éléments constitutifs et ensuite les encoder, l'hôte et le chemin d'accès, mais pas le régime. Puis le remettre à nouveau ensemble.
Créer un NSURL avec la chaîne, puis utilisez la méthode sur elle comme hôte, le schéma, le chemin d'accès, d'interrogation, etc pour la tirer en dehors. Ensuite, utilisez CFURLCreateStringByAddingPercentescapes pour coder les pièces et ensuite vous pouvez les mettre à nouveau ensemble dans un nouveau NSURL.
Swift 4.x
pouvez vous s'il vous plaît Essayer.
Je ne suis pas sûr,mais je l'ai résolu en utilisant ce dans mon cas.
Espérons que cela permettra de résoudre le vôtre.