Swift 2.3解析JSON含HTML标签数据:如何保留格式移除标签?
解决Swift 2.3中JSON解析后字符串含HTML标签的问题
刚好我之前也碰到过一模一样的情况,给你两种靠谱的处理方案,既能干净移除HTML标签,又不会破坏原本的文本内容:
方案一:用NSAttributedString转换(推荐)
这个是系统原生的处理方式,能稳妥应对各种HTML格式(包括嵌套标签、带属性的标签),把HTML结构直接转换成纯文本。先写个工具函数:
func stripHTML(from string: String) -> String { guard let data = string.dataUsingEncoding(NSUTF8StringEncoding) else { // 字符串转Data失败时返回原内容 return string } do { let attributedString = try NSAttributedString( data: data, options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding ], documentAttributes: nil ) return attributedString.string } catch { print("去除HTML标签出错:\(error)") return string } }
然后修改你原来的代码,记得别用强制解包!,换成可选绑定更安全:
if let usernameRAW = json["username"] as? String { self.username = stripHTML(from: usernameRAW) print("Username: \(self.username)") } else { // 处理JSON中没有username字段的情况 self.username = "" print("JSON中未找到username字段") }
方案二:正则表达式替换(适合简单场景)
如果你的HTML标签都是<p>、<div>这类无复杂属性的简单标签,也可以用正则直接替换掉所有标签内容:
func stripHTMLWithRegex(from string: String) -> String { return string.stringByReplacingOccurrencesOfString( "<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil ) }
用法和方案一一致,把stripHTML换成stripHTMLWithRegex即可。不过这个方法对复杂HTML(比如带样式的标签、嵌套标签)处理可能不够彻底,所以优先推荐方案一。
内容的提问来源于stack exchange,提问作者Denisse
相关产品推荐
相关产品推荐

