在“预览文章”中禁用HTML标记

时间:2012-01-25 08:20:59

标签: c# asp.net

我在网站上显示文字“预览”时遇到问题。让我们假设它是一篇文章,我只想显示文章的前50个字母(人们将不得不点击“阅读更多”来阅读其余文章),我已经完成但我现在的问题是它将文本显示为HTML

所以,我做的是以下内容:

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

上面的这一行显示了描述,然后调用我的TextService.cs将文本裁剪为50个字母,如下所示:

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的情况下将“预览文本”显示为纯文本?

我希望这一切都有意义 - 否则随意提问。

3 个答案:

答案 0 :(得分:0)

.NET框架中没有开箱即用的解决方案。

我个人使用这种方法来清除html文本(整齐地回退到较低的.NET框架):

/// <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

编辑:如果你可以并且想要使用linq,请给出archil的方法。

答案 1 :(得分:0)

这可以使用像HtmlAgilityPack

这样的html库非常简单地完成
    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();
    }

添加长度检查取决于您:)

答案 2 :(得分: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);
}