asp.net(文章截取前幾行作為列表摘要)無損返回HTML代碼
更新時間:2012年12月04日 16:56:54 作者:
asp.net(文章截取前幾行作為列表摘要)無損返回HTML代碼,需要的朋友可以參考下
復(fù)制代碼 代碼如下:
<BR> /* <STRONG>時間很久遠(yuǎn)了,有碼友要,我抄了下來,記得使用的時候還是有部分例外情況要處理,大部分是ok的。</STRONG>
* 函數(shù):
* 說明:無損返回HTML代碼
*
* 作者:卡斯Kas(QQ:10590916)
* 修改:2010-12-13、
*/
public static string LeftH(string str, int l)
{
//為了防止錯誤
string odstr = str;
bool isHtml = false;//判斷截取開頭是否是字符串
int maxLen = str.Length;
int n = 0, i = 0, b = 0, e = 0;
string c, c2 = "", Start = "", EndLabel = "", AllLabel = "";
if (l >= str.Length) return str;//截取字段大于字符長度
bool isErr = false;
try
{
while (n < l && i < maxLen)
{
//1
i++;
c = str.Substring(i - 1, 1);
string end2str = "";
try
{
end2str = str.Substring(i - 1, 2);
}
catch
{
end2str = "";
}
if (c == "<" && end2str != "</")
{
isHtml = true;
b = i;//記錄一個位置
//5 解決非成對標(biāo)簽
string end2tag = "";
try
{
end2tag = str.Substring(i, 2);
}
catch
{
end2tag = "";
}
if (end2tag == "br")
{
isHtml = false;
}
if (str.Substring(i, 1).ToLower() == "%")
{
isHtml = false;
}
if (str.Substring(i, 1).ToLower() == "?")
{
isHtml = false;
}
else if (end2tag == "hr")
{
isHtml = false;
}
//5end
}
//1end
//2
if (c == "<" && end2str == "</")
{
c2 = str.Substring(i - 1, str.Substring(i - 1).IndexOf(">") + 1);
AllLabel = AllLabel.Substring(c2.Length);
}
//2end
Start = Start + c;//記錄當(dāng)前字符及其前面字符
if (!isHtml)
{
//6 較為準(zhǔn)確的計數(shù)
try
{
if (str.Substring(i, 2).ToLower() == "br")
{
}
else if (str.Substring(i, 2).ToLower() == "hr")
{
}
else
{
n++;
}
}
catch
{
//如果出錯,則返回純文本(@"<[^>]+>|</[^>]+>");
//odstr = Regex.Replace(odstr, @"<[^>]+>|</[^>]+>", "", RegexOptions.IgnoreCase);
odstr = odstr.Replace("<", "<").Replace(">", ">");
if (l > odstr.Length) l = odstr.Length;
return odstr.Substring(0, l);
}
//6end
}
else
{
if (c == ">")//如果循環(huán)到>時,要處理的成對標(biāo)簽中間部分
{
if (isHtml)
{
EndLabel = str.Substring(b, i - b);//獲取<到>之間的代碼
e = EndLabel.IndexOf(" ");//標(biāo)簽屬性都有空格,以空格為分割,獲取標(biāo)簽名
if (e > 0)
{
EndLabel = "</" + EndLabel.Substring(0, e) + ">";
}
else
{
EndLabel = "</" + EndLabel;
}
AllLabel = EndLabel + AllLabel;//記錄當(dāng)前結(jié)束標(biāo)簽,及所有有關(guān)結(jié)束標(biāo)簽
}
isHtml = false;//重置屬性,從新開始
}
}
//4 當(dāng)結(jié)束時,發(fā)現(xiàn)有未閉合的標(biāo)簽,則重新來一次
if (n + 1 >= l)
{
if (InStrN(Start, "<") != InStrN(Start, ">"))
{
n--;
}
}
//4end
}//end while
}
catch
{
isErr = true;
}
string newReString = Start + AllLabel + "...";
//最后再次驗證
Regex Rg = new Regex("<.[^>/]+>", RegexOptions.Compiled);
Regex Rg2 = new Regex(@"<\s*/[a-z]\s*>", RegexOptions.Compiled);
if (inStrLen(newReString, "<") != inStrLen(newReString, ">"))
{
isErr = true;
}
else if (inStrLen(newReString.Replace(""", "\""), "\"") % 2 == 1)
{
isErr = true;
}
else if (Rg.Matches(newReString).Count != Rg2.Matches(newReString).Count)
{
isErr = true;
}
if (isErr)
{
odstr = odstr.Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'");
if (l > odstr.Length)
{ newReString = odstr; }
else
{
try
{
newReString = odstr.Substring(0, l) + "...";
}
catch
{
newReString = odstr;
}
}
}
return newReString;//返回
}
您可能感興趣的文章:
- 適用與firefox ASP.NET無刷新二級聯(lián)動下拉列表
- asp.net Ext grid 顯示列表
- asp.net 自制的單選、多選列表實現(xiàn)代碼
- asp.net 下拉列表無級數(shù)據(jù)綁定實現(xiàn)代碼
- asp.net 新聞列表樣式代碼
- ASP.NET對無序列表批量操作的三種方法小結(jié)
- ASP.NET系統(tǒng)關(guān)鍵字及保留字列表整理
- asp.net TreeView與XML三步生成列表樹
- ASP.NET批量操作基于原生html標(biāo)簽的無序列表的三種方法
- asp.net新聞列表生成靜態(tài)頁之批量和單頁生成
- ASP.NET MVC5網(wǎng)站開發(fā)概述(一)
- ASP.NET MVC5網(wǎng)站開發(fā)項目框架(二)
- ASP.NET?MVC5?網(wǎng)站開發(fā)框架模型、數(shù)據(jù)存儲、業(yè)務(wù)邏輯(三)
- ASP.NET?MVC5網(wǎng)站開發(fā)用戶注冊(四)
- ASP.NET?MVC5網(wǎng)站開發(fā)用戶登錄、注銷(五)
- ASP.NET MVC5網(wǎng)站開發(fā)用戶修改資料和密碼(六)
- ASP.NET MVC5網(wǎng)站開發(fā)文章管理架構(gòu)(七)
- ASP.NET MVC5網(wǎng)站開發(fā)添加文章(八)
- ASP.NET?MVC5網(wǎng)站開發(fā)顯示文章列表(九)
相關(guān)文章
Path類與Directory類與File類對路徑/目錄/文件的操作實例
本文將詳細(xì)介紹下:Path對路徑字符串進(jìn)行操作/Directory和DirectoryInfo 對目錄進(jìn)行操作/File和FileInfo對文件進(jìn)行操作,感興趣的你可不要錯過了哈2013-02-02淺談ASP.NET Core 2.0 帶初始參數(shù)的中間件(譯)
這篇文章主要介紹了淺談ASP.NET Core 2.0 帶初始參數(shù)的中間件(譯),非常具有實用價值,需要的朋友可以參考下2017-10-10.net 中的SqlConnection連接池機(jī)制詳解
.net 中通過 SqlConnection 連接 sql server,我們會發(fā)現(xiàn)第一次連接時總是很耗時,但后面連接就很快,這個其實和SqlConnection 的連接池機(jī)制有關(guān)2013-04-04.Net Core簡單使用Mvc內(nèi)置的Ioc(續(xù))
怎樣直接獲取Ioc中的實例對象,而不是以構(gòu)造函數(shù)的方式進(jìn)行獲取呢?這篇文章繼續(xù)為大家介紹.Net Core簡單使用Mvc內(nèi)置的Ioc2018-03-03服務(wù)器讀取EXCEL不安裝OFFICE如何實現(xiàn)
用asp.net做了一簡單的游戲管理后臺,涉及到了上傳Excel導(dǎo)入數(shù)據(jù)的功能,在本地開發(fā)實現(xiàn)都好好的,可已上傳的服務(wù)器上就悲劇了,下面有個不錯的解決方法,大家可以參考下2014-03-03