LoginSignup
3
3

More than 3 years have passed since last update.

Swift:HTMLエンティティを含む文字列をデコードする方法

Posted at

はじめに

APIなどを介して取得した< ⇒ &lt;& ⇒ &amp;のようなHTMLのエンティティ参照(Entity References)を含むStringを普通の文字列にデコードする必要があったため調べたところ,IBM-Swift/swift-html-entitiesalexaubry/HTMLStringなどのオープンソースライブラリを見つけた.しかし,本当にこんなに大掛かりな仕掛けが必要なのか疑問に思った.そこで,例のごとくStack Overflowを漁ったところ,NSAttributeStringを使って一旦WebKitを噛ませればいい感じになるというのを見つけた.見つけたソースをExtension化して使いやすくしたものを備忘録しておく.

ソース

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

let test = "&lt;&amp;&gt;"
Swift.print(test.htmlDecoded) // ⇒ <&>

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3