Przede wszystkim znalazłem to: Cel C HTML escape / unescape , ale nie działa dla mnie.
Moje zakodowane znaki (przy okazji pochodzą z kanału RSS) wyglądają następująco: &
Przeszukałem całą sieć i znalazłem powiązane dyskusje, ale nie poprawiłem mojego konkretnego kodowania, myślę, że nazywa się je znakami szesnastkowymi.
iphone
html
objective-c
cocoa
cocoa-touch
treznik
źródło
źródło
&#...;
w ciągu odpowiadającym mu znakiem.8
.Odpowiedzi:
Nazywa się to odniesieniami do jednostek postaci . Kiedy przyjmują formę
&#<number>;
, nazywane są numerycznymi odniesieniami do bytów . Zasadniczo jest to ciąg znaków reprezentujący bajt, który należy podstawić. W przypadku&
, reprezentuje znak o wartości 38 w schemacie kodowania znaków ISO-8859-1, czyli&
.Powodem, dla którego znak ampersand musi być zakodowany w formacie RSS, jest zastrzeżony znak specjalny.
To, co musisz zrobić, to przeanalizować ciąg i zastąpić jednostki bajtem pasującym do wartości między
&#
a;
. Nie znam żadnych świetnych sposobów na zrobienie tego w celu C, ale pytanie o przepełnienie stosu może być pomocne.Edycja: Od czasu odpowiedzi na to pytanie jakieś dwa lata temu pojawiło się kilka świetnych rozwiązań; zobacz odpowiedź @Michael Waterfall poniżej.
źródło
Sprawdź moją kategorię NSString dla HTML . Oto dostępne metody:
źródło
Ten autorstwa Daniela jest w zasadzie bardzo fajny i naprawiłem tam kilka problemów:
usunięto znak pomijania dla NSSCanner (w przeciwnym razie spacje między dwoma ciągłymi jednostkami byłyby ignorowane
[skaner setCharactersToBeSkipped: nil];
naprawiono parsowanie, gdy występują izolowane symbole `` & '' (nie jestem pewien, jakie jest `` prawidłowe '' wyjście dla tego, właśnie porównałem to z firefoxem):
na przykład
oto zmodyfikowany kod:
źródło
Począwszy od iOS 7, możesz dekodować znaki HTML natywnie, używając an
NSAttributedString
zNSHTMLTextDocumentType
atrybutem:Zdekodowany przypisany ciąg będzie teraz wyświetlany jako: & & <> ™ © ♥ ♣ ♠ ♦.
Uwaga: zadziała tylko wtedy, gdy zostanie wywołany w głównym wątku.
źródło
Wydaje się, że nikt nie wspomina o jednej z najprostszych opcji: Google Toolbox for Mac
(pomimo nazwy działa to również na iOS).
https://github.com/google/google-toolbox-for-mac/blob/master/Foundation/GTMNSString%2BHTML.h
W projekcie musiałem uwzględnić tylko trzy pliki: nagłówek, implementację i
GTMDefines.h
.źródło
Powinienem opublikować to na GitHubie czy coś. To należy do kategorii NSString, używa
NSScanner
do implementacji i obsługuje zarówno szesnastkowe, jak i dziesiętne numeryczne jednostki znakowe, a także zwykłe symboliczne.Ponadto stosunkowo dobrze radzi sobie ze zniekształconymi ciągami znaków (gdy występuje &, po którym występuje nieprawidłowa sekwencja znaków), co okazało się kluczowe w mojej wydanej aplikacji, która używa tego kodu.
źródło
goto
s jako jego okropnego stylu kodu. Należy zamienić linięgoto finish;
zbreak;
.Oto sposób, w jaki robię to przy użyciu frameworka RegexKitLite :
}
Mam nadzieję, że to komuś pomoże.
źródło
możesz użyć tej funkcji, aby rozwiązać ten problem.
źródło
Oto szybka wersja odpowiedzi Walty Yeunga :
źródło
Właściwie świetny framework MWFeedParser Michaela Waterfall (odniósł się do jego odpowiedzi) został rozwidlony przez rmchaara, który zaktualizował go z obsługą ARC!
Możesz go znaleźć na Github tutaj
Naprawdę działa świetnie, użyłem metody stringByDecodingHTMLEntities i działa bez zarzutu.
źródło
Jakbyś potrzebował innego rozwiązania! Ten jest dość prosty i dość skuteczny:
źródło
Jeśli masz odniesienie do jednostki znakowej jako ciąg, np.
@"2318"
Możesz wyodrębnić przekodowany ciąg NSString z poprawnym znakiem Unicode za pomocąstrtoul
;źródło
Szybka 3 wersja odpowiedzi Jugale'a
źródło