2009-08-28 25 views
8

Tôi có một trang web asp.net có một hộp TinyMCE. Người dùng có thể định dạng văn bản và gửi HTML được lưu trữ trong cơ sở dữ liệu.Làm cách nào để tách HTML khỏi Văn bản trong .NET?

Trên máy chủ, tôi muốn tách dải html khỏi văn bản để tôi chỉ có thể lưu trữ văn bản trong cột được lập chỉ mục toàn văn để tìm kiếm.

Thật dễ dàng để tách html trên máy khách bằng cách sử dụng hàm text() của jQuery, nhưng tôi thực sự muốn thực hiện điều này trên máy chủ. Có bất kỳ tiện ích hiện có nào mà tôi có thể sử dụng cho việc này không?

EDIT

Xem câu trả lời của tôi.

EDIT 2

alt text http://tinyurl.com/sillychimp

+0

Tại sao sử dụng TinyMCE nếu bạn chỉ cần đi để loại bỏ tất cả các định dạng ?! –

+0

Tôi đang lưu trữ tệp TinyMCE được tạo ra để tôi có thể hiển thị văn bản được định dạng lại cho người dùng. Tôi sẽ lưu trữ văn bản được rút gọn html trong một cột khác để tìm kiếm toàn văn bản. Tôi không nghĩ rằng đó là một ý tưởng tốt để chỉ mục văn bản đầy đủ/tìm kiếm một cột có chứa một tấn HTML. Tôi không bao gồm những chi tiết này trong câu hỏi ban đầu, bởi vì nó không liên quan gì đến vấn đề của tôi. –

+3

+1 để làm cho tôi xúc động với con khỉ này –

Trả lời

13

Tôi đã tải về HtmlAgilityPack và tạo ra chức năng này:

string StripHtml(string html) 
{ 
    // create whitespace between html elements, so that words do not run together 
    html = html.Replace(">","> "); 

    // parse html 
    var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(html); 

    // strip html decoded text from html 
    string text = HttpUtility.HtmlDecode(doc.DocumentNode.InnerText); 

    // replace all whitespace with a single space and remove leading and trailing whitespace 
    return Regex.Replace(text, @"\s+", " ").Trim(); 
} 
+0

Xem xét nhận xét phong phú cho câu trả lời của bạn. –

+0

Bây giờ hãy xem. –

+0

Tôi đã thấy nó. Tôi nghĩ rằng tôi sẽ chỉ gắn bó với 5 dòng mã tôi đã viết. –

0

Bạn có thể sử dụng một cái gì đó như thế này

string strwithouthtmltag;  
strwithouthtmltag = Regex.Replace(strWithHTMLTags, "<[^>]*>", string.Empty) 
0

Nếu bạn chỉ lưu trữ văn bản cho chỉ mục sau đó bạn có thể muốn làm nhiều hơn một chút so với việc chỉ xóa HTML, chẳng hạn như bỏ qua các từ dừng và loại bỏ các từ ngắn hơn (nói) 3 ký tự. Tuy nhiên, một thẻ đơn giản và stripper Tôi đã từng viết đi một cái gì đó như thế này:

public static string StripTags(string value) 
    { 
     if (value == null) 
      return string.Empty; 

     string pattern = @"&.{1,8};"; 
     value = Regex.Replace(value, pattern, " "); 
     pattern = @"<(.|\n)*?>"; 
     return Regex.Replace(value, pattern, string.Empty); 
    } 

Đó là cũ và tôi chắc chắn rằng nó có thể được tối ưu hóa (có lẽ sử dụng một biên soạn reg-cũ?). Nhưng nó không làm việc và có thể giúp ...

0

Bạn có thể:

  • Sử dụng một TEXTAREA cũ đồng bằng (theo kiểu cho chiều cao/chiều rộng/font/etc.) Chứ không phải là TinyMCE.
  • Sử dụng các tùy chọn cấu hình tích hợp của TinyMCE để loại bỏ HTML không mong muốn.
  • Sử dụng HtmlDecode (RegEx.Replace (mystring, "< [^>] +>", "")) trên máy chủ.
2

Dưới đây là liên kết đang RefactorMe Jeff Atwood cho mình Sanitize HTML method

+0

Và đây là cách anh ta cân bằng các thẻ để bạn không kết thúc với nội dung người dùng của ai đó đóng một div trên trang của bạn mà nó không mở: http: // refactormycode .com/codes/360-balance-html-tags – StriplingWarrior

0

Như bạn có thể có HTML bị thay đổi trong hệ thống: BeautifulSoup hoặc tương tự có thể được đã sử dụng.

Nó được viết bằng Python; Tôi không chắc chắn làm thế nào nó có thể được giao tiếp - bằng cách sử dụng ngôn ngữ .NET IronPython?

0

Bạn có thể sử dụng HTQL COM, và truy vấn nguồn với một truy vấn: < cơ thể > &tx;

1
TextReader tr = new StreamReader(@"Filepath"); 
string str = tr.ReadToEnd();  
str= Regex.Replace(str,"<(.|\n)*?>", string.Empty); 

nhưng bạn cần phải có một không gian tên tham chiếu i.e:

system.text.RegularExpressions 

chỉ mất logic này cho trang web của bạn

+0

RegEX không phải là lựa chọn lý tưởng để phân tích cú pháp RegEx. Xem nhận xét về câu trả lời của RioTera, nhưng ngắn gọn là nếu bạn có HTML không đúng định dạng, RegEx sẽ loại bỏ dữ liệu sai. – psubsee2003

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