代码之家  ›  专栏  ›  技术社区  ›  Emre Isik

如何使用swiftsoup中的换行符更改标记?[复制品]

  •  0
  • Emre Isik  · 技术社区  · 6 年前

    作为Xcode的初学者,我正在开发一个简单的RSS阅读器应用程序。我现在已经设置好了它可以解析提要,放置标题、发布日期、描述和内容,并将其显示在webview中。

    我最近决定在用于选择文章的tableview中显示描述(或内容的截断版本)。但是,执行此操作时:

    cell.textLabel?.text = item.title?.uppercaseString
    cell.detailTextLabel?.text = item.itemDescription //.itemDescription is a String
    

    它显示了文章的原始html。

    我想知道如何将html转换成纯文本,只用于tableview的详细uilabel。

    谢谢!

    0 回复  |  直到 5 年前
        1
  •  198
  •   Leo Dabus    6 年前

    您可以添加此扩展以将HTML代码转换为常规字符串:

    编辑/更新:

    讨论不应在后台调用HTML导入程序 线程(即,选项字典包含带有 html的值)。它将尝试与主线程同步,失败, 然后暂停。从主线程调用它可以工作(但是仍然可以 如果HTML包含对外部资源的引用,则超时 应该不惜一切代价避免)。html导入机制是指 实现类似于标记(即文本样式, 颜色等),不用于常规HTML导入。

    代码9 SWIFT 4

    extension Data {
        var html2AttributedString: NSAttributedString? {
            do {
                return try NSAttributedString(data: self, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
            } catch {
                print("error:", error)
                return  nil
            }
        }
        var html2String: String {
            return html2AttributedString?.string ?? ""
        }
    }
    
    extension String {
        var html2AttributedString: NSAttributedString? {
            return Data(utf8).html2AttributedString
        }
        var html2String: String {
            return html2AttributedString?.string ?? ""
        }
    }
    

    Xcode 8.3–斯威夫特3.1

    extension String {
        var html2AttributedString: NSAttributedString? {
            do {
                return try NSAttributedString(data: Data(utf8), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
            } catch {
                print("error:", error)
                return nil
            }
        }
        var html2String: String {
            return html2AttributedString?.string ?? ""
        }
    }
    

    cell.detailTextLabel?.text = item.itemDescription.html2String
    
        2
  •  3
  •   Suhit Patil    6 年前

    斯威夫特4,Xcode 9

    extension String {
    
        var utfData: Data {
            return Data(utf8)
        }
    
        var attributedHtmlString: NSAttributedString? {
    
            do {
                return try NSAttributedString(data: utfData,
                options: [
                          .documentType: NSAttributedString.DocumentType.html,
                          .characterEncoding: String.Encoding.utf8.rawValue
                         ], documentAttributes: nil)
            } catch {
                print("Error:", error)
                return nil
            }
        }
    }
    
    extension UILabel {
       func setAttributedHtmlText(_ html: String) {
          if let attributedText = html.attributedHtmlString {
             self.attributedText = attributedText
          } 
       }
    }
    
        3
  •  2
  •   Danboz    9 年前

    这是我建议的答案。而不是扩展,如果你想放在函数内部。

    func decodeString(encodedString:String) -> NSAttributedString?
        {
            let encodedData = encodedString.dataUsingEncoding(NSUTF8StringEncoding)!
            do {
                return try NSAttributedString(data: encodedData, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:NSUTF8StringEncoding], documentAttributes: nil)
            } catch let error as NSError {
                print(error.localizedDescription)
                return nil
            }
        }
    

    调用该函数并将nsattributedstring转换为string

    let attributedString = self.decodeString(encodedString)
    let message = attributedString.string
    
        4
  •  1
  •   Altimir Antonov    10 年前

    请使用此代码测试详细文本标签:

    var attrStr = NSAttributedString(
            data: item.itemDescription.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true),
            options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil,
            error: nil)
    cell.detailTextLabel?.text = attrStr
    
        5
  •  1
  •   Hardik Thakkar    7 年前

    在swift3中尝试此解决方案

    extension String{
        func convertHtml() -> NSAttributedString{
            guard let data = data(using: .utf8) else { return NSAttributedString() }
            do{
                return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
            }catch{
                return NSAttributedString()
            }
        }
    }
    

    使用

    self.lblValDesc.attributedText = str_postdescription.convertHtml()
    
        6
  •  0
  •   Shaybc    8 年前

    我使用了danboz答案,只将其更改为返回一个简单字符串(而不是富文本字符串):

    static func htmlToText(encodedString:String) -> String?
    {
        let encodedData = encodedString.dataUsingEncoding(NSUTF8StringEncoding)!
        do
        {
            return try NSAttributedString(data: encodedData, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:NSUTF8StringEncoding], documentAttributes: nil).string
        } catch let error as NSError {
            print(error.localizedDescription)
            return nil
        }
    }
    

    对我来说,这很有魅力,谢谢丹博兹

        7
  •  0
  •   shahana mh    6 年前
    let content = givenString // html included string
    let attrStr = try! NSAttributedString(data: content.data(using: String.Encoding.unicode, allowLossyConversion: true)!,options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],documentAttributes: nil)
    self.labelName.attributedText = attrStr    
    
        8
  •  0
  •   Maulik Patel    5 年前

    Swift4.0扩展

     extension String {
        var html2AttributedString: String? {
        guard let data = data(using: .utf8) else { return nil }
        do {
            return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil).string
    
        } catch let error as NSError {
            print(error.localizedDescription)
            return  nil
        }
      }
    }
    
    推荐文章