Google 有一个完美的解码 HTML 实体的库。
您可以使用扩展 google 实现的另一个 perfect 类将 html 转换为纯文本。
如果你想要一个 Swift 实现,你可以创建一个字符串扩展:
extension String {
static func stringByRemovingHTMLEntities(string: String) -> String {
var result = string
result = result.stringByReplacingOccurrencesOfString("<p>", withString: "\n\n", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("</p>", withString: "", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("–", withString: "-", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("“", withString: "\"", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("”", withString: "\"", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("<i>", withString: "", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("</i>", withString: "", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("&", withString: "&", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString(">", withString: ">", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("'", withString: "'", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("/", withString: "/", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString(""", withString: "\"", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("<", withString: "<", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("<", withString: "<", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString(">", withString: ">", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("&", withString: "&", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("<pre><code>", withString: "", options: .CaseInsensitiveSearch, range: nil)
result = result.stringByReplacingOccurrencesOfString("</code></pre>", withString: "", options: .CaseInsensitiveSearch, range: nil)
var regex = NSRegularExpression(pattern: "<a[^>]+href=\"(.*?)\"[^>]*>.*?</a>",
options: NSRegularExpressionOptions.CaseInsensitive, error: nil)
result = regex!.stringByReplacingMatchesInString(result, options: nil, range: NSMakeRange(0, result.utf16Count), withTemplate: "$1")
return result
}
func stringByDecodingHTMLEntities() -> String? {
var r: NSRange
let pattern = "<[^>]+>"
var s = self.stringByDecodingHTMLEscapeCharacters()
r = (s as NSString).rangeOfString(pattern, options: NSStringCompareOptions.RegularExpressionSearch)
while (r.location != NSNotFound) {
s = (s as NSString).stringByReplacingCharactersInRange(r, withString: " ")
r = (s as NSString).rangeOfString(pattern, options: NSStringCompareOptions.RegularExpressionSearch)
}
return s.stringByReplacingOccurrencesOfString(" ", withString: " ")
}
func stringByDecodingHTMLEscapeCharacters() -> String {
var s = self.stringByReplacingOccurrencesOfString(""", withString: "\"")
s = s.stringByReplacingOccurrencesOfString("'", withString: "'")
s = s.stringByReplacingOccurrencesOfString("&", withString: "&")
s = s.stringByReplacingOccurrencesOfString("<", withString: "<")
s = s.stringByReplacingOccurrencesOfString(">", withString: ">")
s = s.stringByReplacingOccurrencesOfString("'", withString: "'")
s = s.stringByReplacingOccurrencesOfString("&ldquot;", withString: "\"")
s = s.stringByReplacingOccurrencesOfString("&rdquot;", withString: "\"")
s = s.stringByReplacingOccurrencesOfString(" ", withString: " ")
s = s.stringByReplacingOccurrencesOfString("á", withString: "á")
s = s.stringByReplacingOccurrencesOfString("é", withString: "é")
s = s.stringByReplacingOccurrencesOfString("í", withString: "í")
s = s.stringByReplacingOccurrencesOfString("ó", withString: "ó")
s = s.stringByReplacingOccurrencesOfString("ú", withString: "ú")
s = s.stringByReplacingOccurrencesOfString("ñ", withString: "ñ")
s = s.stringByReplacingOccurrencesOfString("’", withString: "'")
return s
}
}