Pertama-tama, saya menemukan ini: Objective C HTML escape / unescape , tetapi tidak berhasil untuk saya.
Karakter saya yang dikodekan (berasal dari umpan RSS, btw) terlihat seperti ini: &
Saya mencari di seluruh internet dan menemukan diskusi terkait, tetapi tidak ada perbaikan untuk pengkodean khusus saya, saya pikir mereka disebut karakter heksadesimal.
iphone
html
objective-c
cocoa
cocoa-touch
treznik
sumber
sumber
&#...;
dalam string dengan karakter yang setara.8
.Jawaban:
Itu disebut Referensi Entitas Karakter . Ketika mereka mengambil bentuk
&#<number>;
mereka disebut referensi entitas numerik . Pada dasarnya, ini adalah representasi string dari byte yang harus diganti. Dalam kasus&
, ini mewakili karakter dengan nilai 38 dalam skema pengkodean karakter ISO-8859-1, yaitu&
.Alasan ampersand harus dikodekan di RSS adalah karena karakter khusus yang dicadangkan.
Yang perlu Anda lakukan adalah mengurai string dan mengganti entitas dengan byte yang cocok dengan nilai antara
&#
dan;
. Saya tidak tahu cara yang bagus untuk melakukan ini di objektif C, tapi pertanyaan stack overflow ini mungkin bisa membantu.Sunting: Sejak menjawab ini sekitar dua tahun yang lalu ada beberapa solusi hebat; lihat jawaban Air Terjun @ Michael di bawah ini.
sumber
Lihat kategori NSString saya untuk HTML . Berikut metode yang tersedia:
sumber
Yang oleh Daniel pada dasarnya sangat bagus, dan saya memperbaiki beberapa masalah di sana:
menghapus karakter melewatkan untuk NSSCanner (jika tidak, spasi antara dua entitas berkelanjutan akan diabaikan
[pemindai setCharactersToBeSkipped: nil];
perbaiki parsing ketika ada simbol '&' yang terisolasi (saya tidak yakin apa output yang 'benar' untuk ini, saya baru saja membandingkannya dengan firefox):
misalnya
berikut adalah kode yang dimodifikasi:
sumber
Mulai iOS 7, Anda dapat mendekode karakter HTML secara native dengan menggunakan
NSAttributedString
denganNSHTMLTextDocumentType
atribut:String atribut yang didekode sekarang akan ditampilkan sebagai: & & <> ™ © ♥ ♣ ♠ ♦.
Catatan: Ini hanya akan berfungsi jika dipanggil di utas utama.
sumber
Sepertinya tidak ada yang menyebutkan salah satu opsi paling sederhana: Google Toolbox untuk Mac
(Terlepas dari namanya, ini juga berfungsi di iOS.)
https://github.com/google/google-toolbox-for-mac/blob/master/Foundation/GTMNSString%2BHTML.h
Dan saya harus menyertakan hanya tiga file dalam proyek: header, implementasi dan
GTMDefines.h
.sumber
Saya harus memposting ini di GitHub atau sesuatu. Ini masuk dalam kategori NSString, digunakan
NSScanner
untuk implementasi, dan menangani entitas karakter numerik heksadesimal dan desimal serta simbolik biasa.Juga, ini menangani string yang salah format (ketika Anda memiliki & diikuti oleh urutan karakter yang tidak valid) dengan relatif anggun, yang ternyata sangat penting dalam aplikasi yang saya rilis yang menggunakan kode ini.
sumber
goto
s sebagai gaya kode yang buruk. Anda harus mengganti barisgoto finish;
denganbreak;
.Ini adalah cara saya melakukannya menggunakan kerangka RegexKitLite :
}
Semoga ini bisa membantu seseorang.
sumber
Anda hanya dapat menggunakan fungsi ini untuk menyelesaikan masalah ini.
sumber
Berikut adalah versi Swift dari jawaban Walty Yeung :
sumber
Sebenarnya kerangka kerja MWFeedParser yang hebat dari Air Terjun Michael (mengacu pada jawabannya) telah bercabang oleh rmchaara yang telah memperbaruinya dengan dukungan ARC!
Anda dapat menemukannya di Github di sini
Ini benar-benar berfungsi dengan baik, saya menggunakan metode stringByDecodingHTMLEntities dan bekerja dengan sempurna.
sumber
Seolah Anda membutuhkan solusi lain! Yang ini cukup sederhana dan cukup efektif:
sumber
Jika Anda memiliki Referensi Entitas Karakter sebagai string, misalnya
@"2318"
, Anda dapat mengekstrak NSString yang dikodekan ulang dengan karakter unicode yang benar menggunakanstrtoul
;sumber
Jawaban Jugale versi Swift 3
sumber