Zunächst fand ich Folgendes: Ziel C HTML Escape / Unescape , aber es funktioniert nicht für mich.
Meine verschlüsselten Zeichen (stammen übrigens aus einem RSS-Feed) sehen folgendermaßen aus: &
Ich habe im ganzen Netz gesucht und verwandte Diskussionen gefunden, aber keine Lösung für meine spezielle Codierung. Ich denke, sie werden als hexadezimale Zeichen bezeichnet.
iphone
html
objective-c
cocoa
cocoa-touch
treznik
quelle
quelle
&#...;
in einer Zeichenfolge durch das entsprechende Zeichen zu ersetzen .8
.Antworten:
Diese werden als Zeichenentitätsreferenzen bezeichnet . Wenn sie die Form haben, werden
&#<number>;
sie als numerische Entitätsreferenzen bezeichnet . Grundsätzlich ist es eine Zeichenfolgendarstellung des Bytes, das ersetzt werden soll. Im Fall von&
repräsentiert es das Zeichen mit dem Wert 38 im Zeichenkodierungsschema ISO-8859-1&
.Der Grund, warum das kaufmännische Und in RSS codiert werden muss, ist ein reserviertes Sonderzeichen.
Sie müssen lediglich die Zeichenfolge analysieren und die Entitäten durch ein Byte ersetzen, das dem Wert zwischen
&#
und entspricht;
. Ich kenne keine großartigen Möglichkeiten, dies in Ziel C zu tun, aber diese Frage zum Stapelüberlauf könnte hilfreich sein.Bearbeiten: Seit der Beantwortung vor zwei Jahren gibt es einige großartige Lösungen; Siehe die Antwort von @Michael Waterfall unten.
quelle
Überprüfen Sie meine NSString-Kategorie für HTML . Hier sind die verfügbaren Methoden:
quelle
Der von Daniel ist im Grunde sehr nett und ich habe dort ein paar Probleme behoben:
Das überspringende Zeichen für NSSCanner wurde entfernt (andernfalls werden Leerzeichen zwischen zwei fortlaufenden Entitäten ignoriert
[scanner setCharactersToBeSkipped: nil];
Die Analyse wurde korrigiert, wenn isolierte '&' Symbole vorhanden sind (ich bin nicht sicher, was die 'richtige' Ausgabe dafür ist, ich habe sie nur mit Firefox verglichen):
z.B
Hier ist der geänderte Code:
quelle
Ab iOS 7 können Sie HTML-Zeichen nativ dekodieren, indem Sie ein
NSAttributedString
mit demNSHTMLTextDocumentType
Attribut verwenden:Die dekodierte zugeordnete Zeichenfolge wird nun wie folgt angezeigt: & & <> ™ © ♥ ♣ ♠ ♦.
Hinweis: Dies funktioniert nur, wenn es im Hauptthread aufgerufen wird.
quelle
Niemand scheint eine der einfachsten Optionen zu erwähnen: Google Toolbox für Mac
(Trotz des Namens funktioniert dies auch unter iOS.)
https://github.com/google/google-toolbox-for-mac/blob/master/Foundation/GTMNSString%2BHTML.h
Und ich musste nur drei Dateien in das Projekt aufnehmen: Header, Implementierung und
GTMDefines.h
.quelle
Ich sollte das auf GitHub posten oder so. Dies gehört zu einer Kategorie von NSString, wird
NSScanner
für die Implementierung verwendet und behandelt sowohl hexadezimale und dezimale numerische Zeichenentitäten als auch die üblichen symbolischen.Außerdem werden fehlerhafte Zeichenfolgen (wenn Sie ein & gefolgt von einer ungültigen Zeichenfolge haben) relativ elegant behandelt, was sich in meiner veröffentlichten App , die diesen Code verwendet , als entscheidend herausstellte .
quelle
goto
s als schrecklichen Codestil zu verwenden. Sie sollten die Leitunggoto finish;
durch ersetzenbreak;
.So mache ich es mit dem RegexKitLite- Framework:
}}
Hoffe das wird jemandem helfen.
quelle
Sie können nur diese Funktion verwenden, um dieses Problem zu lösen.
quelle
Hier ist eine schnelle Version von Walty Yeungs Antwort :
quelle
Tatsächlich wurde das großartige MWFeedParser-Framework von Michael Waterfall (auf seine Antwort verwiesen) von rmchaara gegabelt, der es mit ARC-Unterstützung aktualisiert hat!
Sie finden es in Github hier
Es funktioniert wirklich gut, ich habe die stringByDecodingHTMLEntities-Methode verwendet und funktioniert einwandfrei.
quelle
Als ob Sie eine andere Lösung brauchen! Dieser ist ziemlich einfach und ziemlich effektiv:
quelle
Wenn Sie die
@"2318"
Zeichenentitätsreferenz als Zeichenfolge haben, können Sie z. B. einen neu codierten NSString mit dem richtigen Unicode-Zeichen extrahierenstrtoul
.quelle
Swift 3-Version von Jugales Antwort
quelle