web-dev-qa-db-fra.com

encoder l'URL en utilisant le code Swift

J'ai besoin d'envoyer une URL en langue arabe, donc je dois l'encoder avant de la mettre en URL. J'utilise le code Swift.

Voici un exemple de ce dont j'ai vraiment besoin

var s = "www.example.com/السلام عليكم"

let url = NSURL(string : s)

Donc la Parole (السلام عليكم) est en caractères arabes que ce que je veux envoyer.

16
inanva

Swift 2.0

let urlwithPercentEscapes = myurlstring.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet())

Swift 3

let urlwithPercentEscapes = myurlstring.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
27
yarlg

Pour améliorer La réponse de @ Druva Créer une extension quelque part dans le projet

Swift 2.0

extension String
{   
    func encodeUrl() -> String
    {
        return self.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet())
    }
func decodeUrl() -> String
    {
        return self.stringByRemovingPercentEncoding
    }

}

Swift 3.0

 extension String
    {   
        func encodeUrl() -> String
        {
            return self.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
        }
    func decodeUrl() -> String
        {
            return self.stringByRemovingPercentEncoding
        }

    }
9
Vyacheslav

Vous devez encoder l'URL comme vous l'avez écrit. Vous pouvez le faire avec cette méthode de chaîne:

stringByAddingPercentEscapesUsingEncoding(NSStringEncoding)

Donc, votre code sera:

var s = "www.example.com/السلام عليكم"
// you may add check before force unwrapping
let url = NSURL(string : s.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
6
Vasily

Swift 4 Nous sommes confrontés au même problème qu’il a résolu de cette façon 

extension String { 
var fixedArabicURL: String?  {
       return self.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics
           .union(CharacterSet.urlPathAllowed)
           .union(CharacterSet.urlHostAllowed))
   } }
1
amrObjection

Vous devez encoder cette chaîne car elle contient des caractères spéciaux.

var s = "www.example.com/السلام عليكم"
let encodedLink = s.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)
let encodedURL = NSURL(string: encodedLink!)! as URL

où encodedURL est votre URL finale

1
Gary G