Swift - เข้ารหัส URL


295

ถ้าฉันเข้ารหัสสตริงเช่นนี้

var escapedString = originalString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

/มันไม่ได้หลบหนีทับ

ฉันค้นหาและพบรหัส C วัตถุประสงค์นี้:

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

มีวิธีที่ง่ายกว่าในการเข้ารหัส URL และถ้าไม่ฉันจะเขียนมันใน Swift ได้อย่างไร

คำตอบ:


613

สวิฟท์ 3

ใน Swift 3 มี addingPercentEncoding

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

เอาท์พุท:

ทดสอบ% 2Ftest

สวิฟท์ 1

ใน iOS 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

ตัวอย่างการตรวจสอบอักขระ ASCII ที่ไม่อยู่ในชุด:

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" นานแค่ไหน
zaph

1
stringByAddingPercentEncodingWithAllowedCharacters (.URLHostAllowedCharacterSet ()) ไม่ได้เข้ารหัสอักขระทั้งหมดอย่างถูกต้องคำตอบของ Bryan Chen เป็นทางออกที่ดีกว่า
Julio Garcia

2
@zaph ฉันเพิ่มลง&ในชุดอักขระของ URLQueryAllowedCharacterSetและฉันได้รับการเข้ารหัสอักขระแต่ละตัว ตรวจสอบกับ iOS 9 แล้วว่าเป็นบั๊กกี้ฉันไปกับคำตอบของ @ bryanchen มันทำงานได้ดี !!
Akash Kava

3
คำตอบด้านล่างที่ใช้URLComponentsและURLQueryItemเป็น IMO ที่สะอาดกว่ามาก
Aaron Brager

65

คุณสามารถใช้ URLComponents เพื่อหลีกเลี่ยงการเข้ารหัสร้อยละสตริงข้อความค้นหาของคุณด้วยตนเอง:

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
คำตอบนี้ต้องการความสนใจมากขึ้นเนื่องจากมีปัญหากับคนอื่น ๆ ทั้งหมด (แม้ว่าจะยุติธรรมพวกเขาอาจได้รับการปฏิบัติที่ดีที่สุดในเวลา)
Asa

4
น่าเศร้าที่URLQueryItemไม่ได้เข้ารหัสอย่างถูกต้องเสมอ ยกตัวอย่างเช่นFormula+Oneจะได้รับการเข้ารหัสซึ่งจะถูกถอดรหัสเพื่อFormula+One Formula Oneดังนั้นให้ระมัดระวังด้วยเครื่องหมายบวก
Sulthan

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. encodingURL:

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 开发工程师
Akshay Phulare

2
ใช้urlHostAllowedสำหรับการเข้ารหัสพารามิเตอร์แบบสอบถามในที่ไม่ถูกต้องเพราะมันจะไม่เข้ารหัส?, และ= +เมื่อเข้ารหัสพารามิเตอร์ข้อความค้นหาคุณจะต้องเข้ารหัสชื่อและค่าพารามิเตอร์แยกต่างหากและถูกต้อง สิ่งนี้จะไม่ทำงานในกรณีทั่วไป
Sulthan

@Sulthan .. คุณพบวิธีแก้ปัญหา / ทางเลือกอื่น ๆ สำหรับurlHostAllowed
Bharath

@Bharath ใช่คุณต้องสร้างชุดอักขระด้วยตัวเองเช่นstackoverflow.com/a/39767927/669586URLComponentsหรือการใช้งานเพียงแค่
Sulthan

URLComponents ไม่ได้เข้ารหัส+อักขระด้วย ดังนั้นตัวเลือกเดียวคือทำด้วยตนเอง:CharacterSet.urlQueryAllowed.subtracting(CharacterSet(charactersIn: "+"))
SoftDesigner

36

สวิฟท์ 3:

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

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

2
คุณต้องรวม `` (ช่องว่าง) ในสตริงอักขระ
AJP

1
คุณต้องใส่ ^
Mani

26

สวิฟต์ 4

หากต้องการเข้ารหัสพารามิเตอร์ใน URL ฉันพบว่าการใช้.alphanumericsตัวอักษรกำหนดตัวเลือกที่ง่ายที่สุด:

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

การใช้ชุดอักขระมาตรฐานใด ๆ สำหรับการเข้ารหัส URL (เช่นURLQueryAllowedCharacterSetหรือURLHostAllowedCharacterSet) จะไม่ทำงานเนื่องจากจะไม่รวม=หรือ&อักขระ

หมายเหตุว่าด้วยการใช้.alphanumericsมันจะเข้ารหัสอักขระบางตัวที่ไม่ต้องมีการเข้ารหัส (เช่น-, ., _หรือ~- ดู2.3 ตัวอักษรไม่ได้จอง.ใน RFC 3986) ฉันพบว่าการใช้.alphanumericsง่ายกว่าการสร้างชุดอักขระที่กำหนดเองและไม่สนใจว่าจะเข้ารหัสอักขระเพิ่มเติมบางส่วน หากสิ่งนั้นรบกวนคุณให้สร้างชุดอักขระแบบกำหนดเองตามที่อธิบายไว้ในวิธีเปอร์เซ็นต์การเข้ารหัสสตริง URLเช่น:

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พารามิเตอร์เป็นแรงยังไม่ได้เปิด สำหรับสตริง Unicode ที่ไม่ถูกต้องอาจมีปัญหา ดูเหตุใดค่าส่งคืนของ String.addingPercentEncoding () จึงเป็นทางเลือกหรือไม่ . แทนที่จะบังคับให้เปิดออกencoded!คุณสามารถใช้encoded ?? ""หรือใช้งานif let encoded = ...ได้


1
. ตัวเลขที่ได้ทำเคล็ดลับขอขอบคุณ! ชุดอักขระอื่น ๆ ทั้งหมดไม่สามารถหลีกเลี่ยง & ซึ่งทำให้เกิดปัญหาเมื่อใช้สตริงเป็นรับพารามิเตอร์
Dion

14

ทุกอย่างเหมือนกัน

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

// test%2Ftest

คุณไม่ได้.bridgeToOvjectiveC()โต้แย้งที่สองและไม่ได้รับ "ไม่สามารถแปลงประเภท 'CFString!' ของนิพจน์ได้ วิธีการพิมพ์ 'CFString!' "
Kreiri

@Kreiri ทำไมมันจำเป็น? ทั้งสนามเด็กเล่นและ REPL มีความสุขกับรหัสของฉัน
ไบรอันเฉิน

ของฉันไม่ใช่: / (เบต้า 2)
Kreiri

1
นี่เป็นคำตอบที่ดีกว่าเพราะเข้ารหัส & ถูกต้อง
Sam

13

สวิฟท์ 4:

ขึ้นอยู่กับกฎการเข้ารหัสตามด้วยเซิร์ฟเวอร์ของคุณ

Apple เสนอวิธีการเรียนนี้ แต่ไม่ได้รายงานโปรโตคอล RCF ชนิดใดที่ตามมา

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

ต่อไปนี้เป็นเครื่องมือที่มีประโยชน์คุณควรรับประกันการเข้ารหัสของตัวอักษรเหล่านี้สำหรับพารามิเตอร์ของคุณ:

  • $ (เครื่องหมายดอลลาร์) กลายเป็น% 24
  • & (เครื่องหมายและ) กลายเป็น% 26
  • + (บวก) กลายเป็น% 2B
  • , (จุลภาค) กลายเป็น% 2C
  • : (ลำไส้ใหญ่) กลายเป็น% 3A
  • ; (เซมิโคลอน) กลายเป็น% 3B
  • = (เท่ากับ) กลายเป็น% 3D
  • ? (เครื่องหมายคำถาม) กลายเป็น% 3F
  • @ (Commercial A / At) กลายเป็น% 40

กล่าวอีกอย่างหนึ่งเกี่ยวกับการเข้ารหัส URL คุณควรติดตามโปรโตคอล RFC 1738โปรโตคอล

และ Swift ไม่ได้ครอบคลุมการเข้ารหัสของ + char ตัวอย่างเช่นแต่มันทำงานได้ดีกับสาม@:ตัวอักษร

ดังนั้นในการเข้ารหัสพารามิเตอร์แต่ละตัวของคุณอย่างถูกต้อง.urlHostAllowedตัวเลือกไม่เพียงพอคุณควรเพิ่มตัวอักษรพิเศษเช่น:

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

หวังว่านี่จะช่วยคนที่คลั่งไคล้ในการค้นหาข้อมูลเหล่านี้


การใช้งานของคุณผิดอย่างสมบูรณ์ พารามิเตอร์ "věž" จะถูกเข้ารหัสได้อย่างไร?
MariánČerný

13

Swift 4 (ไม่ได้ทดสอบ - โปรดแสดงความคิดเห็นว่ามันใช้งานได้หรือไม่ขอบคุณ @sumizome สำหรับคำแนะนำ)

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

สวิฟท์ 3

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

Swift 2.2 (การยืมจาก Zaph's และการแก้ไขคีย์แบบสอบถาม url และค่าพารามิเตอร์)

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"

นี่เป็นคำตอบสั้น ๆ ของ Bryan Chen ฉันเดาว่าurlQueryAllowedจะอนุญาตให้ตัวควบคุมผ่านซึ่งเป็นเรื่องปกติเว้นแต่พวกเขาเป็นส่วนหนึ่งของคีย์หรือค่าในสตริงการสืบค้นของคุณที่จุดที่พวกเขาต้องการที่จะหลบหนี


2
ฉันชอบโซลูชัน Swift 3 แต่ไม่ได้ผลสำหรับฉันใน Swift 4: "ไม่สามารถใช้การกลายสมาชิกในค่าที่เปลี่ยนไม่ได้: 'urlQueryAllowed' เป็นคุณสมบัติแบบรับเท่านั้น"
MariánČerný

@ MariánČernýเพียงแค่สร้าง CharacterSet ที่ไม่แน่นอน (ด้วยvar) แล้วเรียก.removeใช้ในขั้นตอนที่สอง
sumizome

ฉันเชื่อว่าสิ่งนี้และวิธีแก้ปัญหาอื่น ๆ ส่วนใหญ่มีปัญหาเมื่อใช้วิธีสองครั้งเช่นเมื่อรวม URL ที่มีพารามิเตอร์ที่เข้ารหัสในพารามิเตอร์ของ URL อื่น
FD_

@FD_ คุณรู้หรือไม่หรือเพิ่งมีลางสังหรณ์ คุณสามารถทดลองกับมันและโพสต์กลับมาได้ไหม จะเป็นการดีหากรวมข้อมูลนี้ไว้ด้วย ขอบคุณ.
AJP

@AJP ฉันเพิ่งทดสอบตัวอย่างทั้งหมดของคุณ Swift 3 และ 4 ทำงานได้ดี แต่ Swift 2.2 นั้นไม่ได้เข้ารหัส% 20 เป็น% 2520 อย่างถูกต้อง
FD_

7

สวิฟท์ 4.2

ทางออกเดียวที่รวดเร็ว แทนที่originalStringด้วยสตริงที่คุณต้องการเข้ารหัส

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

การสาธิตสนามเด็กเล่นออนไลน์


สิ่งนี้ทำงานได้ดีขอบคุณ: คุณสามารถตรวจสอบและลองถอดรหัสและเข้ารหัสผลลัพธ์ urldecoder.org
Rakshitha Muranga Rodrigo

4

จำเป็นต้องใช้สิ่งนี้ด้วยตนเองดังนั้นฉันจึงเขียนส่วนขยายของสตริงที่ทั้งสองอนุญาตสำหรับสตริง URLEncoding รวมถึงเป้าหมายปลายทางทั่วไปที่มากขึ้นโดยแปลงพจนานุกรมพารามิเตอร์เป็นพารามิเตอร์ URL สไตล์ "GET":

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
สิ่งนี้ไม่ได้เข้ารหัสสัญญาณ '&' ใช้ '&' ในพารามิเตอร์ประสงค์ F *** ขึ้นสตริงการสืบค้น
แซม

นี่เป็นสิ่งที่ผิดมันไม่ได้เข้ารหัส&หรือ=ในพารามิเตอร์ ตรวจสอบโซลูชันของฉันแทน
MariánČerný

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/



0

SWIFT 4.2

บางครั้งสิ่งนี้เกิดขึ้นเพียงเพราะมีช่องว่างในกระสุนหรือขาดการเข้ารหัส URL สำหรับพารามิเตอร์ที่ส่งผ่าน API URL

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 กรณีการใช้งานคือการใช้ URL จากคลิปบอร์ดหรือที่คล้ายกันซึ่งอาจมีตัวละครที่หลบหนี แต่ซึ่งยังมีตัวละคร Unicode ซึ่งอาจทำให้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ด้วยวิธีการเข้ารหัส URL:

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และ+ระยะห่างจะถูกเก็บรักษาไว้อักขระ Unicode จะถูกเข้ารหัส%20ในที่เป็นต้นฉบับurlTextไม่ได้เข้ารหัสสองครั้งและ#ยังคงยึด (ชิ้นส่วนหรือ)

แก้ไข:ตอนนี้กำลังตรวจสอบความถูกต้องของแต่ละองค์ประกอบ


0

สำหรับ Swift 5 ถึง endcode string

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)

คุณอาจต้องการสร้างชุดอักขระของคุณเองทั้งนี้ขึ้นอยู่กับพารามิเตอร์ของสิ่งที่คุณพยายามทำ ด้านบนอนุญาตสำหรับอักขระภาษาอังกฤษและ-._~/?%$!:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.