সুইফট - এনকোড ইউআরএল


295

যদি আমি এর মতো একটি স্ট্রিং এনকোড করি:

var escapedString = originalString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

এটা স্ল্যাশ অব্যাহতি না /

আমি এই উদ্দেশ্য সি কোডটি অনুসন্ধান করে খুঁজে পেয়েছি:

NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                        NULL,
                        (CFStringRef)unencodedString,
                        NULL,
                        (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                        kCFStringEncodingUTF8 );

কোনও ইউআরএল এনকোড করার সহজ উপায় আছে এবং যদি না হয় তবে আমি কীভাবে এটি সুইফটে লিখব?

উত্তর:


613

সুইফট 3

সুইফ্ট 3 এ রয়েছে addingPercentEncoding

let originalString = "test/test"
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
print(escapedString!)

আউটপুট:

পরীক্ষা% 2Ftest

সুইফট ঘ

আইওএস 7 এবং এর উপরে রয়েছে stringByAddingPercentEncodingWithAllowedCharacters

var originalString = "test/test"
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())
println("escapedString: \(escapedString)")

আউটপুট:

পরীক্ষা% 2Ftest

নিম্নলিখিতগুলি দরকারী (বিপরীত) অক্ষর সেট:

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

আপনি যদি চান অক্ষরের একটি আলাদা সেট থেকে বাঁচতে চান একটি সেট তৈরি করুন:
যুক্ত "=" অক্ষরের সাথে উদাহরণ:

var originalString = "test/test=42"
var customAllowedSet =  NSCharacterSet(charactersInString:"=\"#%/<>?@\\^`{|}").invertedSet
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(customAllowedSet)
println("escapedString: \(escapedString)")

আউটপুট:

পরীক্ষা% 2Ftest% 3D42

অ্যাস্কি অক্ষর যাচাইয়ের উদাহরণ সেটটিতে নেই:

func printCharactersInSet(set: NSCharacterSet) {
    var characters = ""
    let iSet = set.invertedSet
    for i: UInt32 in 32..<127 {
        let c = Character(UnicodeScalar(i))
        if iSet.longCharacterIsMember(i) {
            characters = characters + String(c)
        }
    }
    print("characters not in set: \'\(characters)\'")
}

6
এই কোডটি আর কতক্ষণ চালিয়ে যায় তা নিয়ে অন্য কেউ পুরোপুরি ভ্রষ্ট হয় না? আমি বোঝাতে চাইছি পদ্ধতির নামটি ইতিমধ্যে অনুমোদিত চরিত্রের সেটটি না বাছাই করেও দীর্ঘস্থায়ী।
thatidiotguy

38
না, আমি সংক্ষিপ্ত পরিশ্রমের নামকরণের চেয়ে বোঝার পক্ষে। স্বতঃস্মরণ ব্যথাটি কেড়ে নেয়। stringByAddingPercentEncodingWithAllowedCharacters()এটি কী করে তা নিয়ে সামান্য সন্দেহ ফেলে। আকর্ষণীয় মন্তব্য: শব্দটি কত দীর্ঘ: "flabbergasted"।
জাফ

1
স্ট্রিংবাইএডিংপ্রেসেন্টস এনকোডিং উইথঅ্যালয়েডচারারস (। URLHostAllowedCharacterSet ()) সমস্ত অক্ষর সঠিকভাবে এনকোড করে না ব্রায়ান চেনের উত্তর একটি আরও ভাল সমাধান।
জুলিও গার্সিয়া

2
@ জাফ আমি &চরিত্রের সেটটিতে যুক্ত করেছি URLQueryAllowedCharacterSetএবং আমি প্রতিটি চরিত্রকে এনকোড করেছি। আইওএস 9 দিয়ে চেক করা হয়েছে, দেখতে বগির মতো দেখাচ্ছে, আমি @ ব্রায়ঞ্চনের জবাবটি দিয়েছিলাম, এটি ভাল কাজ করে !!
আকাশ কাবা

3
নীচের উত্তর যা ব্যবহার করে URLComponentsএবং URLQueryItemঅনেক ক্লিনার আইএমও।
অ্যারোন ব্র্যাজার

65

আপনি নিজের প্রশ্নের স্ট্রিংটি ম্যানুয়ালি শতাংশে এনকোড না করে এড়াতে আপনি ইউআরএল উপাদানগুলি ব্যবহার করতে পারেন:

let scheme = "https"
let host = "www.google.com"
let path = "/search"
let queryItem = URLQueryItem(name: "q", value: "Formula One")


var urlComponents = URLComponents()
urlComponents.scheme = scheme
urlComponents.host = host
urlComponents.path = path
urlComponents.queryItems = [queryItem]

if let url = urlComponents.url {
    print(url)   // "https://www.google.com/search?q=Formula%20One"
}

extension URLComponents {
    init(scheme: String = "https",
         host: String = "www.google.com",
         path: String = "/search",
         queryItems: [URLQueryItem]) {
        self.init()
        self.scheme = scheme
        self.host = host
        self.path = path
        self.queryItems = queryItems
    }
}

let query = "Formula One"
if let url = URLComponents(queryItems: [URLQueryItem(name: "q", value: query)]).url {
    print(url)  // https://www.google.com/search?q=Formula%20One
}

7
এই উত্তরের আরও মনোযোগ দেওয়া দরকার, কারণ অন্য সমস্তগুলির সাথে সমস্যা রয়েছে (যদিও এটি নির্বিচারে হতে পারে তারা সম্ভবত সেরা অনুশীলন হতে পারে)।
আসা

4
দুঃখের বিষয়, URLQueryItemসর্বদা সঠিকভাবে এনকোড করে না। উদাহরণস্বরূপ, এ Formula+Oneএনকোড করা হবে Formula+One, যা ডিকোড করা হবে Formula One। সুতরাং প্লাস চিহ্ন সহ সতর্কতা অবলম্বন করুন।
সুলতান

37

সুইফট 3:

let originalString = "http://www.ihtc.cc?name=htc&title=iOS开发工程师"

1. এনকোডিংকিউয়ারি:

let escapedString = originalString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)

ফলাফল:

"http://www.ihtc.cc?name=htc&title=iOS%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88" 

2. এনকোডিং URL:

let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

ফলাফল:

"http:%2F%2Fwww.ihtc.cc%3Fname=htc&title=iOS%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88"

আমি প্রথম সমাধানটি ব্যবহার করেছি তবে আমি iOS like like এর মতো আমার পাঠ্যটিতে ফিরে যেতে চাই 工程师
অক্ষয় ফুলারে

2
ব্যবহার urlHostAllowedভুল কারণ এটি সঙ্কেতাক্ষরে লিখা না করবে না ক্যোয়ারী পরামিতি এনকোডিং করার জন্য ?, =এবং +। ক্যোয়ারী প্যারামিটারগুলি এনকোড করার সময় আপনাকে প্যারামিটারের নাম এবং মান পৃথকভাবে এবং সঠিকভাবে এনকোড করতে হবে। এটি সাধারণ ক্ষেত্রে কাজ করবে না।
সুলতান

@ সুলতান .. আপনি কি কোনও সমাধান / বিকল্প খুঁজে পেয়েছেনurlHostAllowed
ভরথ

@Bharath হ্যাঁ, আপনি নিজের দ্বারা যেমন একটি অক্ষর সেট তৈরি করতে হবে stackoverflow.com/a/39767927/669586 বা শুধু ব্যবহার URLComponents
সুলতান 6'19

ইউআরএল উপাদানগুলি চরটি +খুব বেশি এনকোড করে না। সুতরাং ম্যানুয়ালি এটি করা একমাত্র বিকল্প:CharacterSet.urlQueryAllowed.subtracting(CharacterSet(charactersIn: "+"))
সফট ডিজাইনার

36

সুইফট 3:

let allowedCharacterSet = (CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[] ").inverted)

if let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) {
//do something with escaped string
}

2
অক্ষরের স্ট্রিংয়ে আপনাকে `` (স্পেস) অন্তর্ভুক্ত করতে হবে
এজেপি

1
আপনাকে include
মণি

26

সুইফট 4

ইউআরএলটিতে একটি পরামিতি এনকোড করতে আমি .alphanumericsঅক্ষরটি ব্যবহার করে সবচেয়ে সহজ বিকল্পটি খুঁজে পাই :

let encoded = parameter.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
let url = "http://www.example.com/?name=\(encoded!)"

ইউআরএল এনকোডিং (যেমন URLQueryAllowedCharacterSetবা URLHostAllowedCharacterSet) এর জন্য স্ট্যান্ডার্ড চরিত্রের যে কোনওটি ব্যবহার করা কার্যকর হবে না, কারণ তারা বাদ দেয় না =বা &অক্ষর দেয় না ।

নোট যে ব্যবহার করে .alphanumericsএটি কিছু অক্ষর আছে যা এনকোড করা প্রয়োজন হবে না এনকোড পাবেন (মত -, ., _বা ~- দেখুন । 2.3 অসংরক্ষিত অক্ষর বোঝায় যা RFC 3986 সালে)। আমি .alphanumericsএকটি কাস্টম অক্ষর সেট তৈরির চেয়ে সহজ ব্যবহার খুঁজে পাই এবং কিছু অতিরিক্ত অক্ষর এনকোড করতে আপত্তি করি না। যদি এটি আপনাকে বিরক্ত করে, একটি ইউআরএল স্ট্রিং কীভাবে শতাংশে এনকোড করতে হয় তার মধ্যে বর্ণিত হিসাবে একটি কাস্টম চরিত্র সেট তৈরি করুন , যেমন:

var allowed = CharacterSet.alphanumerics
allowed.insert(charactersIn: "-._~") // as per RFC 3986
let encoded = parameter.addingPercentEncoding(withAllowedCharacters: allowed)
let url = "http://www.example.com/?name=\(encoded!)"

সতর্কতা:encoded প্যারামিটার বল না মোড়ানো হয়। অবৈধ ইউনিকোড স্ট্রিংয়ের জন্য এটি ক্র্যাশ হতে পারে। দেখুন স্ট্রিং.এডিংপেসেন্টস এনকোডিং () এর রিটার্ন মান কেন alচ্ছিক? । জোর করে আন-র্যাপিংয়ের পরিবর্তে encoded!আপনি ব্যবহার encoded ?? ""বা ব্যবহার করতে পারেন if let encoded = ...


1
.fanumerics কৌতুকটি করেছেন, আপনাকে ধন্যবাদ! প্যারামিটারগুলি পেতে স্ট্রিংগুলি ব্যবহার করার সময় অন্যান্য সমস্ত অক্ষর সেটগুলি এড়াতে পারেনি which
ডিওন

এটি আমার একটি আসল মাথা স্ক্র্যাচার সমাধান করেছে
রল্ফ ল্যাচার

14

সব কিছুই এক রকম

var str = CFURLCreateStringByAddingPercentEscapes(
    nil,
    "test/test",
    nil,
    "!*'();:@&=+$,/?%#[]",
    CFStringBuiltInEncodings.UTF8.rawValue
)

// test%2Ftest

আপনি .bridgeToOvjectiveC()দ্বিতীয় যুক্তি করেননি এবং "এক্সপ্রেশনর ধরণের 'সিএফএসস্ট্রিং রূপান্তর করতে পারবেন না!' 'সিএফএসস্ট্রিং!' টাইপ করতে?
ক্রেরি

@ ক্রিরি কেন এটি দরকার? খেলার মাঠ এবং REPL উভয়ই আমার কোড নিয়ে খুশি।
ব্রায়ান চেন

আমার নয়: / (বিটা 2)
ক্রাইরি

1
এটি সঠিকভাবে এনকোড হওয়ায় এটি আরও ভাল উত্তর।
স্যাম

13

সুইফট 4:

এটি আপনার সার্ভার দ্বারা অনুসরণ করা এনকোডিং বিধি দ্বারা নির্ভর করে।

অ্যাপল এই ক্লাস পদ্ধতিটি অফার করে, তবে এটি অনুসরণ করে এমন কোন ধরণের আরসিএফ প্রোটোকলটির প্রতিবেদন করে না।

var escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!

এই দরকারী সরঞ্জাম অনুসরণ করে আপনার পরামিতিগুলির জন্য এই অক্ষরের এনকোডিংয়ের গ্যারান্টি দেওয়া উচিত:

  • $ (ডলার সাইন)% 24 হয়ে যায়
  • & (অ্যাম্পারস্যান্ড)% 26 হয়
  • + (প্লাস)% 2B হয়
  • , (কমা)% 2 সি হয়
  • : (কোলন)% 3A হয়
  • ; (আধা-কোলন)% 3 বি হয়
  • = (সমান)% 3 ডি হয়ে যায়
  • ? (প্রশ্ন চিহ্ন)% 3F হয়
  • @ (বাণিজ্যিক এ / এট)% 40 হয়ে যায়

অন্য কথায়, ইউআরএল এনকোডিং সম্পর্কে কথা বলার জন্য, আপনার আরএফসি 1738 প্রোটোকলটি অনুসরণ করা উচিত ।

এবং সুইফ্ট উদাহরণস্বরূপ + চরের এনকোডিংটি কভার করে না , তবে এটি এই তিনটি @ এর সাথে ভাল কাজ করে:? অক্ষর।

সুতরাং, প্রতিটি আপনার প্যারামিটারটি সঠিকভাবে এনকোড করার জন্য .urlHostAllowedবিকল্পটি যথেষ্ট নয়, উদাহরণস্বরূপ আপনার বিশেষ অক্ষর যুক্ত করা উচিত:

encodedParameter = parameter.replacingOccurrences(of: "+", with: "%2B")

আশা করি এটি এই তথ্য অনুসন্ধান করতে পাগল হয়ে এমন কাউকে সহায়তা করবে।


আপনার বাস্তবায়ন সম্পূর্ণ ভুল। "Vme" একটি প্যারামিটার কীভাবে এনকোড করা হবে?
মারিওন আর্নে

13

সুইফট 4 (পরীক্ষিত নয় - দয়া করে মন্তব্য করুন যদি এটি কাজ করে বা না হয় তবে পরামর্শের জন্য @ সুমিজোম)

var allowedQueryParamAndKey = NSCharacterSet.urlQueryAllowed
allowedQueryParamAndKey.remove(charactersIn: ";/?:@&=+$, ")
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)

সুইফট 3

let allowedQueryParamAndKey =  NSCharacterSet.urlQueryAllowed.remove(charactersIn: ";/?:@&=+$, ")
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)

সুইফট ২.২ (জাফের কাছ থেকে ধার নেওয়া এবং ইউআরএল কোয়েরি কী এবং প্যারামিটার মানগুলির জন্য সংশোধন করা)

var allowedQueryParamAndKey =  NSCharacterSet(charactersInString: ";/?:@&=+$, ").invertedSet
paramOrKey.stringByAddingPercentEncodingWithAllowedCharacters(allowedQueryParamAndKey)

উদাহরণ:

let paramOrKey = "https://some.website.com/path/to/page.srf?a=1&b=2#top"
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)
// produces:
"https%3A%2F%2Fsome.website.com%2Fpath%2Fto%2Fpage.srf%3Fa%3D1%26b%3D2%23top"

এটি ব্রায়ান চেনের উত্তরের একটি সংক্ষিপ্ত সংস্করণ। আমি অনুমান করেছিলাম যে urlQueryAllowedনিয়ন্ত্রণ অক্ষরগুলির মধ্য দিয়ে এটি ঠিক আছে যদি না তারা আপনার জিজ্ঞাসার স্ট্রিংয়ের মূল বা মানটির অংশ গঠন করে তবে তাদের এড়াতে হবে।


2
আমি সুইফট 3 সমাধানটি পছন্দ করি, তবে এটি আমার পক্ষে সুইফট 4-তে কার্যকর হয় না: "পরিবর্তনীয় সদস্যের পক্ষে পরিবর্তনকারী সদস্য ব্যবহার করতে পারবেন না: 'urlQueryAllowed' একটি প্রাপ্ত-সম্পত্তি" "
মারিওন আর্নে

@ মারিওনার্নে ক্যারেক্টারসেটকে কেবল পরিবর্তনযোগ্য (সাথে var) করুন এবং তারপরে .removeদ্বিতীয় ধাপে এটি কল করুন।
বিশিষ্ট

আমি বিশ্বাস করি যে এই এবং অন্যান্য বেশিরভাগ সমাধানের ক্ষেত্রে দুটিবার পদ্ধতি প্রয়োগ করার সময় সমস্যা রয়েছে, উদাহরণস্বরূপ যখন অন্য কোনও URL এর পরামিতিগুলিতে এনকোডড প্যারাম সহ কোনও URL অন্তর্ভুক্ত থাকে।
এফডি_

@ এফডি_ আপনি কি জানেন বা আপনার কাছে কেবল একটি কুঁচক আছে? আপনি কি এটি নিয়ে পরীক্ষা করে আবার পোস্ট করতে পারেন? যদি হয় তবে এই তথ্যটি অন্তর্ভুক্ত করা ভাল। ধন্যবাদ.
এজেপি

@ এজেপি আমি সবেমাত্র আপনার সমস্ত স্নিপেট পরীক্ষা করেছি। সুইফট 3 এবং 4 টি সূক্ষ্ম কাজ করে তবে সুইফট ২.২-র জন্য একটি% ২০ %কে% 2520 হিসাবে সঠিকভাবে এনকোড করে না।
এফডি_

7

সুইফট 4.2

একটি দ্রুত এক লাইন সমাধান। originalStringআপনি যে স্ট্রিংটি এনকোড করতে চান তা প্রতিস্থাপন করুন ।

var encodedString = originalString.addingPercentEncoding(withAllowedCharacters: CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[]{} ").inverted)

অনলাইন খেলার মাঠ ডেমো


এই কাজের জন্য ধন্যবাদ: আপনি পরীক্ষা করতে এবং ডিকোড এবং এনকোড ফলাফল এ চেষ্টা করতে পারেন। urldecoder.org
রক্ষিতা

4

এটির আমার নিজের প্রয়োজন ছিল, সুতরাং আমি একটি স্ট্রিং এক্সটেনশন লিখেছিলাম যা উভয়ই ইউআরএলএনকোডিং স্ট্রিংয়ের পাশাপাশি আরও সাধারণ লক্ষ্য হিসাবে, একটি পরামিতি অভিধানকে "জিইটি" শৈলীর ইউআরএল পরামিতিগুলিতে রূপান্তর করার অনুমতি দেয়:

extension String {
    func URLEncodedString() -> String? {
        var escapedString = self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
        return escapedString
    }
    static func queryStringFromParameters(parameters: Dictionary<String,String>) -> String? {
        if (parameters.count == 0)
        {
            return nil
        }
        var queryString : String? = nil
        for (key, value) in parameters {
            if let encodedKey = key.URLEncodedString() {
                if let encodedValue = value.URLEncodedString() {
                    if queryString == nil
                    {
                        queryString = "?"
                    }
                    else
                    {
                        queryString! += "&"
                    }
                    queryString! += encodedKey + "=" + encodedValue
                }
            }
        }
        return queryString
    }
}

উপভোগ করুন!


2
এটি '&' চিহ্নটি এনকোড করে না। একটি প্যারামিটার ইচ্ছা চ ইন ব্যবহার করে একটি '&' *** আপ querystring
স্যাম

এটি ভুল, এটি এনকোড &বা =পরামিতিগুলিতে নেই। পরিবর্তে আমার সমাধান পরীক্ষা করুন।
মারিওন আর্নে

2

এই আমার জন্য কাজ করছে।

func stringByAddingPercentEncodingForFormData(plusForSpace: Bool=false) -> String? {

    let unreserved = "*-._"
    let allowed = NSMutableCharacterSet.alphanumericCharacterSet()
    allowed.addCharactersInString(unreserved)

    if plusForSpace {
        allowed.addCharactersInString(" ")
    }

    var encoded = stringByAddingPercentEncodingWithAllowedCharacters(allowed)

    if plusForSpace {
        encoded = encoded?.stringByReplacingOccurrencesOfString(" ", withString: "+")
    }
    return encoded
}

আমি এই লিঙ্কটি থেকে উপরের ফাংশনটি পেয়েছি: http://useyourloaf.com/blog/how-to-percent-encode-a-url-string/


1

let Url = URL(string: urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")


0

সুইফট 4.2

কখনও কখনও এটি ঘটেছিল কেবল এআইপিএল ইউআরএল পেরিয়ে যাওয়া প্যারামিটারগুলির জন্য স্লাগে বা ইউআরএল এনকোডিংয়ের জায়গা না থাকার কারণে।

let myString = self.slugValue
                let csCopy = CharacterSet(bitmapRepresentation: CharacterSet.urlPathAllowed.bitmapRepresentation)
                let escapedString = myString!.addingPercentEncoding(withAllowedCharacters: csCopy)!
                //always "info:hello%20world"
                print(escapedString)

দ্রষ্টব্য: সম্পর্কে সন্ধান করতে ভুলবেন না bitmapRepresentation


0

এটি সুইফট 5-এ আমার জন্য কাজ করছে । ব্যবহারের ক্ষেত্রে ক্লিপবোর্ড বা অনুরূপ কোনও ইউআরএল নেওয়া হচ্ছে যা ইতিমধ্যে অক্ষরগুলি থেকে রক্ষা পেয়েছে তবে এতে ইউনিকোড অক্ষর রয়েছে যা ব্যর্থ হতে পারে URLComponentsবা URL(string:)ব্যর্থ হতে পারে।

প্রথমে একটি অক্ষর সেট তৈরি করুন যাতে সমস্ত URL- আইনী অক্ষর রয়েছে:

extension CharacterSet {

    /// Characters valid in at least one part of a URL.
    ///
    /// These characters are not allowed in ALL parts of a URL; each part has different requirements. This set is useful for checking for Unicode characters that need to be percent encoded before performing a validity check on individual URL components.
    static var urlAllowedCharacters: CharacterSet {
        // Start by including hash, which isn't in any set
        var characters = CharacterSet(charactersIn: "#")
        // All URL-legal characters
        characters.formUnion(.urlUserAllowed)
        characters.formUnion(.urlPasswordAllowed)
        characters.formUnion(.urlHostAllowed)
        characters.formUnion(.urlPathAllowed)
        characters.formUnion(.urlQueryAllowed)
        characters.formUnion(.urlFragmentAllowed)

        return characters
    }
}

এরপরে, Stringইউআরএলগুলি এনকোড করার পদ্ধতি সহ প্রসারিত করুন :

extension String {

    /// Converts a string to a percent-encoded URL, including Unicode characters.
    ///
    /// - Returns: An encoded URL if all steps succeed, otherwise nil.
    func encodedUrl() -> URL? {        
        // Remove preexisting encoding,
        guard let decodedString = self.removingPercentEncoding,
            // encode any Unicode characters so URLComponents doesn't choke,
            let unicodeEncodedString = decodedString.addingPercentEncoding(withAllowedCharacters: .urlAllowedCharacters),
            // break into components to use proper encoding for each part,
            let components = URLComponents(string: unicodeEncodedString),
            // and reencode, to revert decoding while encoding missed characters.
            let percentEncodedUrl = components.url else {
            // Encoding failed
            return nil
        }

        return percentEncodedUrl
    }

}

যা পরীক্ষা করা যেতে পারে:

let urlText = "https://www.example.com/폴더/search?q=123&foo=bar&multi=eggs+and+ham&hangul=한글&spaced=lovely%20spam&illegal=<>#top"
let url = encodedUrl(from: urlText)

urlশেষে মান :https://www.example.com/%ED%8F%B4%EB%8D%94/search?q=123&foo=bar&multi=eggs+and+ham&hangul=%ED%95%9C%EA%B8%80&spaced=lovely%20spam&illegal=%3C%3E#top

মনে রাখবেন যে উভয় %20এবং +ব্যবধান সংরক্ষণ করা আছে, ইউনিকোড অক্ষরগুলি এনকোড করা হয়েছে, %20আসলটি urlTextডাবল এনকোডড নয়, এবং অ্যাঙ্কর (টুকরা, বা #) অবশেষ।

সম্পাদনা করুন: এখন প্রতিটি উপাদানটির বৈধতা পরীক্ষা করা হচ্ছে।


0

সুইডফ 5-এ এন্ডকোড স্ট্রিংয়ের জন্য

func escape(string: String) -> String {
    let allowedCharacters = string.addingPercentEncoding(withAllowedCharacters: CharacterSet(charactersIn: ":=\"#%/<>?@\\^`{|}").inverted) ?? ""
    return allowedCharacters
}

ব্যবহারবিধি ?

let strEncoded = self.escape(string: "http://www.edamam.com/ontologies/edamam.owl#recipe_e2a1b9bf2d996cbd9875b80612ed9aa4")
print("escapedString: \(strEncoded)")

0

এই উত্তরগুলির কোনওোটাই আমার পক্ষে কাজ করেনি। যখন কোনও url- এ অ-ইংরেজি অক্ষর থাকে তখন আমাদের অ্যাপ্লিকেশনটি ক্রাশ হয়।

 let unreserved = "-._~/?%$!:"
 let allowed = NSMutableCharacterSet.alphanumeric()
     allowed.addCharacters(in: unreserved)

 let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: allowed as CharacterSet)

আপনি যা করার চেষ্টা করছেন তার পরামিতিগুলির উপর নির্ভর করে আপনি কেবল নিজের চরিত্রের সেট তৈরি করতে চাইতে পারেন। উপরেরটি ইংরেজী অক্ষরগুলির জন্য অনুমতি দেয় এবং and-._~/?%$!:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.