এটি সুইফট 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
ডাবল এনকোডড নয়, এবং অ্যাঙ্কর (টুকরা, বা #
) অবশেষ।
সম্পাদনা করুন: এখন প্রতিটি উপাদানটির বৈধতা পরীক্ষা করা হচ্ছে।