禁用HTML标记输入”;预览文章”;
本文关键字:文章 输入 HTML 禁用 | 更新日期: 2023-09-27 18:21:32
我在网站上显示文本的"预览"时遇到问题。假设这是一篇文章,我只想显示文章的前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的纯文本?
我希望这一切都是有意义的——否则请随意提问。
在.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的方法。
这可以非常简单地使用像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();
}
添加长度检查由您决定:)
我使用的方法与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);
}