代码之家  ›  专栏  ›  技术社区  ›  Cameron

ASP.NET C#截断

  •  2
  • Cameron  · 技术社区  · 15 年前

    我将以下内容存储在数据库列中:

    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    

    它使用以下方式显示: <%= m.article %>

    <p> 然后只显示40个字符并以。。。所以我最终会得到这样的结果:

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat...
    

    Html.Encode 会去掉HTML标记,但不能百分之百确定,也不知道如何将其与将内容截断为40个字符的方法结合起来。如果有人能帮我,那就太棒了。谢谢。

    4 回复  |  直到 12 年前
        1
  •  2
  •   RPM1984    15 年前

    从我头上掉下来,像这样?

    public static string EncodeAndTrimText(this HtmlHelper helper, string text)
    {
       string result = string.Empty;
       result = HttpUtility.HtmlEncode(result);
       if (result.length > 40)
          return result.Substring(0, 40) + "...";
       return result;
    }
    

    HttpUtility.HtmlEncode将只对 <p> result = result.Replace("<p>", string.Empty);

    用法:

    <% Html.EncodeAndTrimText(Model.SomeProperty) %>
    
        2
  •  2
  •   Dave Anderson    15 年前
    <%= String.Format("{0:40}...", m.article.Replace("<p>", string.Empty).Replace("</p>", string.Empty) %>
    
        3
  •  1
  •   abatishchev Karl Johan    15 年前

    我有一些功能可以满足你的要求。它使用正则表达式来去除html。下面是一个示例程序:

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {    
                string s = @"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>";    
    
                Console.WriteLine(Truncate(StripHTML(s), 40) + "...");
                Console.ReadLine();
            }    
    
            public static string StripHTML(string html)
            {
                return RegularExpressions.Regex.Replace(html, @"<.*?>", string.Empty, RegularExpressions.RegexOptions.IgnoreCase);    
            }
    
            public static string Truncate(string input, int length)
            {
                bool isTruncated = true;
    
                if (input.Length > length)
                {
                    char[] TextEnds = { ' ', '\n', '\r', '\0', '\f', '\t', '\v' };
                    string temp = input.Substring(0, length + 1);
                    string temp2 = temp.TrimEnd(TextEnds);
    
                    if (temp2 == temp)
                    {
                        //we truncated in the middle of a word
                        temp2 = temp.Substring(0, temp.LastIndexOfAny(TextEnds));    
                    }
                    else
                    {
                        //we did not truncate in the middle of a word
                        //now we just need to return temp2 
    
                        //we do need to determine if the actual text of the word 
                        //changed before we decide if we have really truncated the
                        if (temp2 == input.TrimEnd(TextEnds))
                            isTruncated = false;    
                    }                    
                    return temp2;
                }
                else
                {    
                    return input;
                }    
            }    
        }
    }
    
        4
  •  0
  •   russds    13 年前

    我通过在Models类中添加一个函数来实现这一点,例如:

    namespace InventorySystem.Models
    {
        public class InventoryItem
        {
           public Int Id { get; set; }
           public string Notes { get; set; }
           ...
           public string NotesTruncated
           {
               get
               {
                   //you could add some additional code here to remove the <p>
                   return (Notes.Length > 50) ? Notes.Substring(0, 50) + "..." : Notes;
               }
           }
        }
    }