2012-01-25 6 views
0

私のウェブサイトにテキストの「プレビュー」を表示する際に問題があります。記事の最初の50文字を表示したいと思っています(人は残りの部分を読むために「もっと読む」をクリックする必要があります)、私は達成しましたが、私の問題はHTMLとしてテキストを表示することです。「記事をプレビューする」でHTMLマークアップを無効にする

だから、私は何をやっていることは以下の通りです:

<td><%# Eval("Description").ToString().Crop(50, true) %></td> 

上記のこの行は、説明が表示され、以下のように、50文字までのテキストをトリミングするために私TextService.csを呼び出します。

public static string Crop(this string text, int length) 
{ 
    return Crop(text, length, false); 
} 
public static string Crop(this string text, int length, bool removeBreak) 
{ 
    if (removeBreak) 
     text = text.Replace("<br />", " "); 
    return (text.Length > length) ? string.Format("{0}...", text.Substring(0, length)) : text; 
} 

しかし、自分の記事を大きな太いテキストに編集すると、プレビューボックスにその記事が表示されます。 「プレビューテキスト」をHTMLなしでプレーンテキストとして表示するにはどうすればよいですか?

私はそれがすべて意味があることを願っています。そうでなければ自由に質問してください。

答えて

0

このために.NETフレームワークのソリューションはありません。

私は個人的に(バックきちんと下の.NETフレームワークに落ちる)HTMLテキストをクリアするには、このメソッドを使用します。

/// <summary> 
/// Remove HTML tags from string using char array. 
/// </summary> 
public static string StripTagsCharArray(string source) 
{ 
char[] array = new char[source.Length]; 
int arrayIndex = 0; 
bool inside = false; 

for (int i = 0; i < source.Length; i++) 
{ 
    char let = source[i]; 
    if (let == '<') 
    { 
    inside = true; 
    continue; 
    } 
    if (let == '>') 
    { 
    inside = false; 
    continue; 
    } 
    if (!inside) 
    { 
    array[arrayIndex] = let; 
    arrayIndex++; 
    } 
} 
return new string(array, 0, arrayIndex); 
} 

出典:http://www.dotnetperls.com/remove-html-tags

EDIT:あなたができるとLINQを使用したい場合は、アーチルの方法を一歩譲る。

0

これは、長さチェックを追加HtmlAgilityPack

private string TextOnly(string html) 
    { 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(html); 
     StringBuilder innerTextBuilder = new StringBuilder(); 

     // filter out text nodes 
     foreach (var htmlNode in doc.DocumentNode.DescendantNodes() 
           .Where(x => x.NodeType == HtmlNodeType.Text)) 
     { 
      innerTextBuilder.Append(htmlNode.InnerText); 
     } 

     innerTextBuilder.ToString(); 
    } 

ようなHTMLライブラリを使用して非常に簡単に行うことができますは、あなた次第です:)

0

私はRickjaahと同様の方法を使用しています - だけの行にあなたを上書きこれでTextService.csから投稿されました

public static string Crop(this string text, int length) 
{ 
    text = StripTagsCharArray(text); 
    return (text.Length > length) ? string.Format("{0}...", text.Substring(0, length)) : text; 
} 


/// <summary> 
/// Remove HTML tags from string using char array. 
/// </summary> 
private static string StripTagsCharArray(string source) 
{ 
    char[] array = new char[source.Length]; 
    int arrayIndex = 0; 
    bool inside = false; 

    for (int i = 0; i < source.Length; i++) 
    { 
     char let = source[i]; 
     if (let == '<') 
     { 
     inside = true; 
     continue; 
     } 
     if (let == '>') 
     { 
     inside = false; 
     continue; 
     } 
     if (!inside) 
     { 
     array[arrayIndex] = let; 
     arrayIndex++; 
     } 
    } 
    return new string(array, 0, arrayIndex); 
} 
関連する問題