Menggunakan ASP.NET, bagaimana cara menghapus tag HTML dari string yang diberikan dengan andal (yaitu tidak menggunakan regex)? Saya mencari sesuatu seperti PHP strip_tags
.
Contoh:
<ul><li>Hello</li></ul>
Keluaran:
"Halo"
Saya mencoba untuk tidak menemukan kembali roda, tetapi sejauh ini saya belum menemukan apa pun yang memenuhi kebutuhan saya.
Jawaban:
Jika hanya menghapus semua tag HTML dari sebuah string, ini juga
dapat diandalkandengan regex. Menggantikan:dengan string kosong, secara global. Jangan lupa untuk menormalkan string setelahnya, ganti:
dengan satu spasi, dan pemangkasan hasilnya. Secara opsional, ganti entitas karakter HTML apa pun kembali ke karakter sebenarnya.
Catatan :
>
nilai atribut. Solusi ini akan mengembalikan markup rusak saat menemukan nilai-nilai tersebut.Gunakan parser yang tepat jika Anda harus melakukannya dengan benar dalam segala situasi.
sumber
"e;
. Saya menggabungkannya denganWebUtility.HtmlDecode
untuk itu (yang pada gilirannya tidak akan menghapus tag). Gunakan setelah penghapusan tag, karena dapat menulis ulang>
dan<
. MisalnyaWebUtility.HtmlDecode(Regex.Replace(myTextVariable, "<[^>]*(>|$)", string.Empty))
Unduh HTMLAgilityPack, sekarang! ;) Unduh LInk
Ini memungkinkan Anda memuat dan mengurai HTML. Kemudian Anda dapat menavigasi DOM dan mengekstrak nilai dalam dari semua atribut. Serius, ini akan memakan waktu maksimal sekitar 10 baris kode. Ini adalah salah satu pustaka .net gratis terbesar yang pernah ada.
Berikut ini contohnya:
sumber
text()
node, memangkas konten dan string. Bergabunglah dengan mereka yang memiliki spasi.IEnumerable<string> allText = doc.DocumentNode.SelectNodes("//text()").Select(n => n.InnerText.Trim())
if (doc == null)
cek? Ini selalu salah, bukan?sumber
RegexOptions.SingleLine
.sumber
Saya telah memposting ini di forum asp.net, dan tampaknya masih menjadi salah satu solusi termudah di luar sana. Saya tidak menjamin ini yang tercepat atau paling efisien, tetapi cukup dapat diandalkan. Dalam .NET Anda dapat menggunakan objek Kontrol Web HTML itu sendiri. Yang perlu Anda lakukan hanyalah memasukkan string Anda ke dalam objek HTML sementara seperti DIV, lalu gunakan 'InnerText' bawaan untuk mengambil semua teks yang tidak ada di dalam tag. Lihat di bawah untuk contoh C # sederhana:
sumber
Saya telah menulis metode yang cukup cepat di c # yang mengalahkan Regex. Ini dihosting dalam artikel di CodeProject.
Keuntungannya adalah, di antara kinerja yang lebih baik kemampuan untuk mengganti entitas HTML bernama dan bernomor (seperti
&amp;
dan&203;
) dan penggantian blok komentar dan banyak lagi.Silakan baca artikel terkait di CodeProject .
Terima kasih.
sumber
Bagi Anda yang tidak bisa menggunakan HtmlAgilityPack, pembaca XML .NETs adalah pilihan. Ini bisa gagal pada HTML yang diformat dengan baik jadi selalu tambahkan tangkapan dengan regx sebagai cadangan. Perhatikan ini BUKAN cepat, tetapi ini memberikan peluang bagus untuk langkah sekolah lama melalui debugging.
sumber
sumber
Bagi mereka yang mengeluh tentang solusi Michael Tiptop yang tidak berfungsi, berikut adalah cara .Net4 + untuk melakukannya:
sumber
sumber
Saya telah melihat solusi berbasis Regex yang disarankan di sini, dan mereka tidak membuat saya percaya diri kecuali dalam kasus yang paling sepele. Sebuah tanda kurung sudut dalam atribut adalah semua yang diperlukan untuk merusak, apalagi HTML yang salah format dari alam liar. Dan bagaimana dengan entitas seperti itu
&
? Jika Anda ingin mengubah HTML menjadi teks biasa, Anda juga perlu mendekode entitas.Jadi saya mengusulkan metode di bawah ini.
Menggunakan HtmlAgilityPack , metode ekstensi ini secara efisien menghapus semua tag HTML dari fragmen html. Juga menerjemahkan entitas HTML seperti
&
. Mengembalikan hanya item teks bagian dalam, dengan baris baru di antara setiap item teks.Jika Anda benar-benar serius, kau ingin mengabaikan isi tag HTML tertentu juga (
<script>
,<style>
,<svg>
,<head>
,<object>
datang ke pikiran!) Karena mereka mungkin tidak mengandung konten yang dapat dibaca dalam arti kita setelah. Apa yang Anda lakukan di sana akan bergantung pada keadaan Anda dan seberapa jauh Anda ingin melangkah, tetapi menggunakan HtmlAgilityPack akan sangat mudah untuk memasukkan tag yang dipilih ke daftar putih atau daftar hitam.Jika Anda merender konten kembali ke halaman HTML, pastikan Anda memahami kerentanan XSS & cara mencegahnya - yaitu selalu menyandikan teks yang dimasukkan pengguna yang dirender kembali ke halaman HTML (
>
menjadi>
dll.).sumber
Untuk parameter kedua, yaitu pertahankan beberapa tag, Anda mungkin memerlukan beberapa kode seperti ini dengan menggunakan HTMLagilityPack:
Penjelasan lebih lanjut di halaman ini: http://nalgorithm.com/2015/11/20/strip-html-tags-of-an-html-in-c-strip_html-php-equivalent/
sumber
Anda juga dapat melakukan ini dengan AngleSharp yang merupakan alternatif untuk HtmlAgilityPack (bukan berarti HAP buruk). Ini lebih mudah digunakan daripada HAP untuk mengeluarkan teks dari sumber HTML.
Anda dapat melihat bagian fitur utama di mana mereka membuat kasus menjadi "lebih baik" daripada HAP. Saya pikir untuk sebagian besar, ini mungkin berlebihan untuk pertanyaan saat ini tetapi tetap saja, ini adalah alternatif yang menarik.
sumber
Cukup gunakan
string.StripHTML();
sumber