diff --git a/SignalUI/LinkPreview/HTMLMetadata.swift b/SignalUI/LinkPreview/HTMLMetadata.swift
index dc5609c288..98a94c4849 100644
--- a/SignalUI/LinkPreview/HTMLMetadata.swift
+++ b/SignalUI/LinkPreview/HTMLMetadata.swift
@@ -102,7 +102,23 @@ extension HTMLMetadata {
guard let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else {
return nil
}
- return attributedString.string
+
+ var decodedString = attributedString.string
+ //Attempt recursive decode iteratively a maximum of three times.
+ for _ in 0..<3 {
+ let decodedStringAsData = Data(decodedString.utf8)
+ guard let redecodedAttributedString = try? NSAttributedString(data: decodedStringAsData, options: options, documentAttributes: nil) else {
+ return decodedString
+ }
+ let redecodedString = redecodedAttributedString.string
+ if redecodedString == decodedString {
+ break
+ }
+ else {
+ decodedString = redecodedString
+ }
+ }
+ return decodedString
}
}