2010-02-25 18 views
13

thể trùng lặp:
How to clean HTML tags using C#Làm thế nào tôi có thể tước thẻ html trong C#

cách tốt nhất để tước thẻ HTML trong C# là gì?

+1

Bạn có biết bạn muốn xóa các thẻ nào không? Hay là tất cả? Ngay cả khi các thẻ html thay đổi trong tương lai bạn vẫn muốn mã hoạt động? Đầu vào có luôn là XHTML hợp lệ không? –

+1

Nhân bản: http://stackoverflow.com/questions/787932/using-c-regular-expressions-to-remove-html-tags http://stackoverflow.com/questions/785715/asp-net-strip-html- thẻ và http://stackoverflow.com/questions/1038431/how-to-clean-html-tags-using-c –

Trả lời

2

Để đảm bảo rằng không có thẻ HTML nào có được, hãy sử dụng: HttpServerUtility.HtmlEncode(string);.

Nếu bạn muốn một số để vượt qua, bạn có thể sử dụng số "Whitelist" approach này.

Cập nhật: Đã có một số lỗ hổng được tìm thấy trong mã đó; dưới dạng Developer from Fog Creek tells us.

(liên kết thứ hai bao gồm mã).

+9

HTMLEncode ("Thẻ hình ảnh: "))%> Đầu ra: Thẻ hình ảnh: < img & gt không giống như Dải nó. –

+0

Tất cả phụ thuộc vào kết quả mà anh ta muốn. Nếu anh ta muốn đảm bảo rằng không có thẻ HTML nào được thực thi (và do đó mở bản thân lên tới XSS), hơn là cách đầu tiên là cách 'tốt nhất'. Nếu anh ta chỉ muốn có plaintext đi qua, một biến thể của cách thứ hai là 'tốt nhất'. –

+0

Anh ấy có thể muốn xóa thẻ để hiển thị thẻ dưới dạng văn bản rõ ràng trong nguồn cấp dữ liệu rss hoặc thứ gì đó. Trong PHP bạn có một xây dựng trong funciton gọi là http://php.net/strip_tags mà âm thanh của nó là những gì anh ta muốn. Nhưng danh sách trắng giải quyết được điều đó, bạn cũng có thể sử dụng gói HTML đó hoặc bất kỳ thứ gì được gọi là .. –

20
public static string StripHTML(string htmlString) 
    { 

    string pattern = @"<(.|\n)*?>"; 

    return Regex.Replace(htmlString, pattern, string.Empty); 
    } 
+0

Đẹp googling .. –

+5

niềm vui của tôi, tại dịch vụ của bạn, mam –

+2

Ick, câu hỏi này được lặp đi lặp lại rất nhiều trên SO, và câu trả lời tương tự xấu này được lặp đi lặp lại rất nhiều, quá. Như tôi đã nói trong một bài viết giống hệt nhau: "Bạn không nên sử dụng một biểu thức chính quy để phân tích cú pháp ngữ pháp như HTML. Nếu HTML đang được cung cấp bởi một thực thể bên ngoài, thì nó có thể dễ dàng thao tác để tránh biểu thức chính quy của bạn . " –

7

Lấy chuỗi hoặc tài liệu HTML của bạn và phân tích cú pháp với HTML Agility Pack. Điều này sẽ cung cấp cho bạn một đối tượng HTMLDocument rất giống với một XmlDocument.

Sau đó bạn có thể sử dụng nó là phương pháp như SelectNodes để truy cập những phần của tài liệu mà bạn đang quan tâm.

Nếu bạn chọn sử dụng cách tiếp cận khác, lưu ý rằng phân tích cú pháp HTML (một ngôn ngữ không phải thường xuyên) với Cụm từ thông dụng được coi là a bad idea.

Và bất kể cách tiếp cận nào, nếu bạn đang giữ một số đánh dấu, hãy sử dụng phương pháp tiếp cận danh sách cho phép. Điều này có nghĩa là xóa mọi thứ không được yêu cầu một cách rõ ràng.

+0

Gói Agility HTML đã lưu tôi một ngày. +1 – kenny

+0

Điều gì sẽ xảy ra nếu nó không phải là tài liệu được tạo đúng? Ví dụ chỉ là một bó văn bản với một thẻ ở đâu đó bên trong, Agility Pack sẽ phân tích cú pháp đó cho bạn? –

+0

@EgorPavlikhin có, và nó sẽ sửa lỗi đánh dấu không hợp lệ và tạo một tài liệu html hợp lệ. – Dementic

Các vấn đề liên quan