How do I decode HTML entities in Swift?

后端 未结 23 1899
一生所求
一生所求 2020-11-22 01:47

I am pulling a JSON file from a site and one of the strings received is:

The Weeknd ‘King Of The Fall&         


        
23条回答
  •  别跟我提以往
    2020-11-22 02:51

    Swift 4:

    The total solution that finally worked for me with HTML code and newline characters and single quotes

    extension String {
        var htmlDecoded: String {
            let decoded = try? NSAttributedString(data: Data(utf8), options: [
                .documentType: NSAttributedString.DocumentType.html,
                .characterEncoding: String.Encoding.utf8.rawValue
                ], documentAttributes: nil).string
    
            return decoded ?? self
        }
    }
    

    Usage:

    let yourStringEncoded = yourStringWithHtmlcode.htmlDecoded
    

    I then had to apply some more filters to get rid of single quotes (for example, don't, hasn't, It's, etc.), and new line characters like \n:

    var yourNewString = String(yourStringEncoded.filter { !"\n\t\r".contains($0) })
    yourNewString = yourNewString.replacingOccurrences(of: "\'", with: "", options: NSString.CompareOptions.literal, range: nil)
    

提交回复
热议问题