Wie kann ich decode HTML entities werden in swift?
Bin ich ziehen eine JSON-Datei von einer Website und einer der strings empfangen ist:
The Weeknd ‘King Of The Fall’ [Video Premiere] | @TheWeeknd | #SoPhi
Wie kann ich umwandeln Dinge wie ‘
in die richtigen Zeichen?
Ich habe eine Xcode Spielplatz zu demonstrieren:
import UIKit
var error: NSError?
let blogUrl: NSURL = NSURL.URLWithString("http://sophisticatedignorance.net/api/get_recent_summary/")
let jsonData = NSData(contentsOfURL: blogUrl)
let dataDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
var a = dataDictionary["posts"] as NSArray
println(a[0]["title"])
InformationsquelleAutor code_cookies | 2014-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keinen einfachen Weg, das zu tun, aber Sie können
NSAttributedString
Magie um diesen Prozess so schmerzlos wie möglich zu machen (seien Sie gewarnt, dass diese Methode strip all HTML tags):Erinnern zu initialisieren NSAttributedString vom Haupt-thread nur. Es verwendet einige WebKit-Magie unter, so die Forderung.
Können Sie erstellen Sie Ihre eigenen
String
Erweiterung zu erhöhen Wiederverwendbarkeit:Ich verstehe, was Sie versuchen zu sagen, aber Sie zu negieren Erweiterungen ist nicht der Weg zu gehen.
Um diese Arbeit zu machen, richtig mit nicht-ASCII-Zeichen, die Sie hinzufügen müssen, um eine NSCharacterEncodingDocumentAttribute, zu vergleichen, stackoverflow.com/a/27898167/1187415.
Diese Methode ist extrem schwer und wird nicht empfohlen, in tableviews oder gridviews
Das ist großartig! Obwohl es blockiert den main thread, gibt es eine Möglichkeit, führen Sie es in den hintergrund-thread?
InformationsquelleAutor akashivskyy
@akashivskyy die Antwort ist großartig und zeigt, wie Sie nutzen
NSAttributedString
zum Dekodieren von HTML-entities. Ein möglicher Nachteil(so sagte er) ist, dass alle HTML-markup wird entfernt, so
wird
Unter OS X gibt es
CFXMLCreateStringByUnescapingEntities()
die nicht den job:aber dies ist nicht auf iOS verfügbar.
Hier ist eine Reine Rasche Umsetzung. Es dekodiert die Zeichen-Entitäten
Hinweise, wie
<
mit einem Wörterbuch, und alle numerischen ZeichenPersonen wie
@
oder€
. (Beachten Sie, dass ich nicht alle auflisten252 HTML-entities explizit.)
Swift 4:
Beispiel:
Swift 3:
Swift 2:
und Martin ist dies magnific! funktioniert wie ein Charme! Ich update die Erweiterung für Swift 2 pastebin.com/juHRJ6au vielen Dank!
Ich konvertiert diese Antwort, um die Kompatibilität mit Swift 2 und warf Sie in eine CocoaPod genannt StringExtensionHTML für einfache Bedienung. Beachten Sie, dass Santiago Swift 2 version behebt compile-Zeit Fehler, aber unter den
strtooul(string, nil, base)
ganz verursachen der code nicht zu funktionieren mit numerischen Zeichen-Entitäten und Abstürzen, wenn es darum geht, eine Entität, die es nicht erkennt (anstatt zu Versagen, anmutig).Eigentlich hatte ich konvertiert meine Antwort an Swift 2 bereits im September 2015. Es noch compiliert ohne Warnungen mit Swift 2.2/Xcode 7.3. Oder beziehen Sie sich auf Michael ' s version?
Super Antwort!!! Vielen Dank 😀
InformationsquelleAutor Martin R
Swift 3 version von @akashivskyy Erweiterung,
Für die französischen Zeichen, die ich habe zu verwenden, utf16
InformationsquelleAutor yishus
Swift 2 version von @akashivskyy Verlängerung,
aktualisiert.
InformationsquelleAutor Zaid Pathan
Swift 4
Ich Liebe die Einfachheit dieser Antwort. Es wird jedoch Abstürze verursachen, wenn Sie im hintergrund laufen, da er versucht, führen Sie auf dem Haupt-thread.
InformationsquelleAutor AamirR
InformationsquelleAutor wLc
Swift 4-Version
Bitte, die
rawValue
syntaxNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
undNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
ist schrecklich. Ersetzen Sie es mit.documentType
und.characterEncoding
InformationsquelleAutor pipizanzibar
Ich war auf der Suche nach einer reinen Swift-3.0-Dienstprogramm, um escape/unescape aus HTML-character-Referenzen (D. H. für server-side-Swift-apps auf macOS und Linux) aber nicht finden umfassende Lösungen, so schrieb ich meine eigene Implementierung: https://github.com/IBM-Swift/swift-html-entities
Paket
HTMLEntities
arbeitet mit HTML4 character benannt Verweise sowie hex/dec numeric character references, und es wird erkennen, spezielle numerische character references pro die W3 HTML5-Spezifikation (d.h.€
werden sollte, ohne Umschreibung, wie das Euro-Zeichen (unicode -U+20AC
) und NICHT, wie das unicode-Zeichen fürU+0080
, und bestimmte Bereiche von numeric character references ersetzt werden sollten, die mit den Ersatz-ZeichenU+FFFD
wenn unescaping).Beispiel:
Und für OP ' s Beispiel:
Edit:
HTMLEntities
unterstützt jetzt HTML5 benannte Zeichenreferenzen, wie in der version 2.0.0. Spec-konform ist-Analyse wird auch umgesetzt.( ͡° ͜ʖ ͡° )
), in der Erwägung, dass keine der anderen Antworten verwalten.InformationsquelleAutor Youming Lin
Elegante Swift 4 Lösung
Wenn Sie möchten, eine Zeichenfolge
Diese Erweiterung hinzufügen, um Ihr Projekt
Wenn Sie möchten, eine NSAttributedString mit Fett, Kursiv, Links, usw.:
Diese Erweiterung hinzufügen, um Ihr Projekt
InformationsquelleAutor iLandes
Wäre dies mein Ansatz. Fügen Sie die Entitäten Wörterbuch von https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555 Michael Wasserfall erwähnt.
Beispiele:
ODER
InformationsquelleAutor Bseaborn
Berechnete var version von @yishus' Antwort
InformationsquelleAutor Geva
Aktualisiert, Antwort arbeiten auf Swift 3
InformationsquelleAutor ravalboy
Swift 4
InformationsquelleAutor Haroldo Gondim
Swift 4:
Die gesamte Lösung, die schließlich für mich gearbeitet mit html-code und neue-Zeile-Zeichen und Anführungszeichen
Verwendung:
Hatte ich dann etwas mehr Filter um loszuwerden
single quotes
( zB:don't, hasn't, It's
etc), und neue-Zeile-Zeichen wie\n
einige hat man von Ihnen positiv bewertet werden diese Antwort-und fand es wirklich nützlich ist, was sagt Sie ?
InformationsquelleAutor Naishta
Swift 4
Einfache Nutzung
yup, es war (bearbeitet Nov 1 22:37 und die "Einfache Nutzung" viel schwerer zu begreifen)
InformationsquelleAutor quemeful
Swift-3.0-version mit der tatsächlichen Schriftgröße Umwandlung
In der Regel, wenn Sie direkt konvertieren von html in zugeschrieben Zeichenfolge, die Schriftgröße wird erhöht. Sie können versuchen, zu konvertieren von html-string zugeschrieben string und wieder zurück um den Unterschied zu sehen.
Statt, hier ist die tatsächliche Größe Konvertierung , stellen Sie sicher, dass die Schriftgröße nicht ändern, indem die 0,75-Verhältnis auf alle Schriften
InformationsquelleAutor Fangming
SWIFT 4
rawValue
syntaxNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
undNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
ist schrecklich. Ersetzen Sie es mit.documentType
und.characterEncoding
Die Performance dieser Lösung ist schrecklich. Es ist vielleicht okay für separate caes, Parsen von Dateien wird nicht empfohlen.
InformationsquelleAutor Omar Freewan
Haben Sie einen Blick auf HTMLString - eine Bibliothek, geschrieben in Swift, die erlaubt, dass Sie Ihr Programm zum hinzufügen und entfernen von HTML-entities in Strings
Für die Vollständigkeit, die ich kopiert wichtigsten features von der Website:
InformationsquelleAutor Despotovic
InformationsquelleAutor Deepak
Swift4
Ich mag die Lösung mit documentAttributes aber es ist möglicherweise zu langsam für das Parsen von Dateien und/oder Nutzung in der Tabellenansicht Zellen. Ich kann;t glauben, dass Apple nicht bieten eine anständige Lösung für dieses.
Als eine Abhilfe, die ich gefunden habe auf GitHub dieser String-Erweiterung, die funktioniert perfekt und schnell für die Decodierung.
Also für Situationen, in denen die gegebene Antwort ist zu langsam sehen die Lösung vorschlagen, in diesem link:
https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555
Anmerkung: es ist nicht Parsen von HTML-tags.
InformationsquelleAutor Vincent
Objective-C
InformationsquelleAutor Oded Regev
NSData dataRes = (nsdata-Wert )
var resString = NSString(Daten: dataRes, Kodierung: NSUTF8StringEncoding)
InformationsquelleAutor Yogesh shelke