ASP截取文章一部分显示(无损HTML)
我想取一段文章一部分内容,象网易,百度博客那样,提取发布的文章一部分在前面显示,无损HTML,谁有这样的代码啊。要无损HTML的,去除HTML的达不到我要的效果。有知道的...
我想取一段文章一部分内容,象网易,百度博客那样,提取发布的文章一部分在前面显示,无损HTML,谁有这样的代码啊。
要无损HTML的,去除HTML的达不到我要的效果。有知道的请告诉我下谢谢。 还有二楼的那位,你这个回答太简单了,可以说你不明白。要是有HTML代码的话你那个截取试试。肯定会把<a href 或<font、这样半截的代码给取出来了。
三楼,你那代码少关键程序。 展开
要无损HTML的,去除HTML的达不到我要的效果。有知道的请告诉我下谢谢。 还有二楼的那位,你这个回答太简单了,可以说你不明白。要是有HTML代码的话你那个截取试试。肯定会把<a href 或<font、这样半截的代码给取出来了。
三楼,你那代码少关键程序。 展开
4个回答
展开全部
我是三楼,已经把拷贝来的答案清空了,因为经测试确实不能用,看来不自己写不行了。
于是写了一个函数,大体可以实现楼主要想的,但有瑕疵,就是有可能生成多余的结束标签</>,不过应该不影响使用。楼主可以自行测试,如不满意,请自行修改。下面是代码:
<%
Function LeftH(str,l)
dim labelt,labels
dim ishtml
ishtml=false
dim res
dim c,c2
dim n
n=0
dim maxlen
maxlen=len(str)
dim i
i=0
dim b,e
do while n<l and i<maxlen
i=i+1
c=mid(str,i,1)
if c="<" then
c2=mid(str,i+1,1)
ishtml=true
b=i
end if
res=res+c
if ishtml=false then
n=n+1
else
if c=">" then
if ishtml=true and c2<>"/" then
labels=mid(str,b+1,i-b)
e=InStr(labels," ")
if e>0 then
labels="</"+left(labels,e-1)+">"
else
labels="</"+labels
end if
labelt=labels+labelt
end if
ishtml=false
end if
end if
loop
leftH=res+labelt
end function
dim str
str="<b><font color=red size=4 face=黑体>中华人</font>民共和国</b>"
response.write "原始的效果:<br><br>"+str
response.write "<script>alert('原始的html代码:"+str+"');</script>"
response.write "<hr>"
str=lefth(str,4)
response.write "截取后的效果:<br><br>"+str
response.write "<script>alert('截取后的html代码:"+str+"');</script>"
%>
最后,提醒楼主下次注意,不管大家回答的答案您满意不满意,请尽量客气一些,毕竟您出的是百度分,不是人民币。
希望我的答案对您有所帮助。
于是写了一个函数,大体可以实现楼主要想的,但有瑕疵,就是有可能生成多余的结束标签</>,不过应该不影响使用。楼主可以自行测试,如不满意,请自行修改。下面是代码:
<%
Function LeftH(str,l)
dim labelt,labels
dim ishtml
ishtml=false
dim res
dim c,c2
dim n
n=0
dim maxlen
maxlen=len(str)
dim i
i=0
dim b,e
do while n<l and i<maxlen
i=i+1
c=mid(str,i,1)
if c="<" then
c2=mid(str,i+1,1)
ishtml=true
b=i
end if
res=res+c
if ishtml=false then
n=n+1
else
if c=">" then
if ishtml=true and c2<>"/" then
labels=mid(str,b+1,i-b)
e=InStr(labels," ")
if e>0 then
labels="</"+left(labels,e-1)+">"
else
labels="</"+labels
end if
labelt=labels+labelt
end if
ishtml=false
end if
end if
loop
leftH=res+labelt
end function
dim str
str="<b><font color=red size=4 face=黑体>中华人</font>民共和国</b>"
response.write "原始的效果:<br><br>"+str
response.write "<script>alert('原始的html代码:"+str+"');</script>"
response.write "<hr>"
str=lefth(str,4)
response.write "截取后的效果:<br><br>"+str
response.write "<script>alert('截取后的html代码:"+str+"');</script>"
%>
最后,提醒楼主下次注意,不管大家回答的答案您满意不满意,请尽量客气一些,毕竟您出的是百度分,不是人民币。
希望我的答案对您有所帮助。
展开全部
用len 和 left right 函数 比如从数据库调出一条新闻有20个子你只想显示8个子后面加点,那这段函数就应该这么写,
if len(rs("news"))>8 then
timu=left(rs("news"),8)&"..."
else
timu=rs("news")&"..."
end if
这样出来的效果就是
某某某某某...
不知道我说明白没有
if len(rs("news"))>8 then
timu=left(rs("news"),8)&"..."
else
timu=rs("news")&"..."
end if
这样出来的效果就是
某某某某某...
不知道我说明白没有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主可以用正则表达式来实现........ 以前遇到过类似的问题 我也是用正则表达式来获取 一篇文章开始的20个字作为标题 但是我也没做到无损HTML
相反我是去掉了HTML 在截取的前面的 下面是我的方法 你可以参考修改一下
#region 正则表达式过滤字符串中的HTML标签
public static string ParseTags(string HTMLStr)
{
return System.Text.RegularExpressions.Regex.Replace(HTMLStr, "<[^>]*>", "");
}
#endregion
#region 字符串截取函数
public static string CutString(string inputString, int len)
{
ASCIIEncoding ascii = new ASCIIEncoding();
int tempLen = 0;
string tempString = "";
byte[] s = ascii.GetBytes(inputString);
for (int i = 0; i < s.Length; i++)
{
if ((int)s[i] == 63)
{
tempLen += 2;
}
else
{
tempLen += 1;
}
try
{
tempString += inputString.Substring(i, 1);
}
catch
{
break;
}
if (tempLen > len)
break;
}
//如果截过则加上半个省略号
byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
if (mybyte.Length > len)
tempString += "...";
return tempString;
}
#endregion
相反我是去掉了HTML 在截取的前面的 下面是我的方法 你可以参考修改一下
#region 正则表达式过滤字符串中的HTML标签
public static string ParseTags(string HTMLStr)
{
return System.Text.RegularExpressions.Regex.Replace(HTMLStr, "<[^>]*>", "");
}
#endregion
#region 字符串截取函数
public static string CutString(string inputString, int len)
{
ASCIIEncoding ascii = new ASCIIEncoding();
int tempLen = 0;
string tempString = "";
byte[] s = ascii.GetBytes(inputString);
for (int i = 0; i < s.Length; i++)
{
if ((int)s[i] == 63)
{
tempLen += 2;
}
else
{
tempLen += 1;
}
try
{
tempString += inputString.Substring(i, 1);
}
catch
{
break;
}
if (tempLen > len)
break;
}
//如果截过则加上半个省略号
byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
if (mybyte.Length > len)
tempString += "...";
return tempString;
}
#endregion
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的应该是提取文字内容吧,把HTML代码过滤后再取不就行了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询