标题:如何加强文章简介的截取功能 (附:解决问题之后的小结)
只看楼主
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
 问题点数:0 回复次数:32 
如何加强文章简介的截取功能 (附:解决问题之后的小结)
我是一个初学者,请求资深者友情帮助。

原代码:
我自己使用的一个搏客,在文章预览时可以截取文章开始的一段字符,代码虽然简单,但不理想。代码如下:

程序代码:
<%
IF Len(blogEntry) > 50 THEN
blogEntry=left(blogEntry,50)
blogEntry=blogEntry+" ......"
END IF
Response.Write(blogEntry)
%>


注:blogEntry 为数据库提取的文章内容,截断前50个字符作为简介内容写出。
    Response.Write(blogEntry) 为截取后的文章简介输出。

问题1:如果文章前50个字符内包含了被截断的HTTP标签则页面将出错;比如文章只显示一个图片:
<P><IMG style="WIDTH: 500px; HEIGHT: 353px" "http://www1.
那么截取前50个字符后将会出现显示错误。

问题2:文章的开始用了回车或者使用了段落格式,截取后仍保留了其段落格式,极为不美观。

这里是本人的搏客地址:http://www1.
===========================================================================================
想要解决问题的设想:
1)能否判断出并处理HTTP的围堵标签;以免截断后页面输出出现错误;
2)使中、英文字符在截取后长度相等,以求页面美观;
3)截取后的文章简介消除掉原来的段落格式,比如<BR> 、<P>等。

本人也在网上搜索了相关代码,大多是用JS函数写的,我用代入法进行调试,但总是有一些错误出现。在此,希望有能力者能跟据源码帮助解决以上问题,希望是用ASP语句,代码以简练为佳。先谢了!


[bo]增补:解决问题的小结[/bo]
------------------------------------------------------------------------
本帖得到众多朋友的热心帮助,再次表示谢意!并作个小结如下,以供借鉴。

[bo]1)文章内容截取后首页的简介版式整齐了[/bo]
本帖发表后,很快得到了[bo] hxfly [/bo]的回帖,提出将截取内容消除HTTP的标记,这样截取出来的简介内容就不存在原有的段落格式了。经最后测试,方法有效。

[bo]2)代入函数后的语法错误问题[/bo]
我得到[bo] hxfly [/bo]给出的消除HTTP标记的函数代码(见下面):
-----------------------------------------
<%
'去掉所有HTML标记函数
Function cutStr(str)
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="<(.[^>]*)>"
str=re.Replace(str,"")
set re=Nothing
Dim l,t,c,i
l=Len(str)
t=0
For i=1 to l
c=Abs(Asc(Mid(str,i,1)))
If c>255 Then
    t=t+2    '中文字符
Else
    t=t+1    '英文字符
End If

cutStr=str

Next
cutStr=Replace(cutStr,chr(10),"")
cutStr=Replace(cutStr,chr(13),"")
cutStr=Replace(cutStr,chr(32),"")
End Function
%>
-----------------------------------------
将其代入到截取文章的地方,但是运行时出现“语法错误”的提示!
无赖之下将整个搏客文件打包给[bo] hxfly [/bo]查看,[bo] hxfly [/bo]回帖说没有问题。我仔细看了[bo] hxfly [/bo]的回帖,发现她是将上面这个函数放在</body>标签之外来调用的(见以下代码),我也照此方法修改,再也不回出现提示“语法错误”了。
-------------------------------------------
</body>
</html>
<%
'去掉所有HTML标记函数
Function cutStr(str)
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="<(.[^>]*)>"
str=re.Replace(str,"")
set re=Nothing
Dim l,t,c,i
l=Len(str)
t=0
For i=1 to l
c=Abs(Asc(Mid(str,i,1)))
If c>255 Then
    t=t+2    '中文字符
Else
    t=t+1    '英文字符
End If

cutStr=str

Next
cutStr=Replace(cutStr,chr(10),"")
cutStr=Replace(cutStr,chr(13),"")
cutStr=Replace(cutStr,chr(32),"")
End Function
%>
----------------------------------------------
后来我又测试将该函数放入<head>标签之间,也能正常运行,但是只要放入<body>标签之内,就会立刻出现“程序错误”或者“语法错误”的提示。

[bo]希望遇有此类现象的朋友能够借鉴。一是虚心在这里求教;二是学习帮助者的经验和分析他们变通的方法。[/bo]



补:原ASP文件:

[[it] 本帖最后由 zslj 于 2008-5-2 18:27 编辑 [/it]]

index.rar (3.29 KB)
搜索更多相关主题的帖子: 小结 简介 
2008-04-28 21:32
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
得分:0 
那位能帮忙增强一下代码!
2008-04-28 23:18
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
得分:0 
热心的版主在哪里,请出手相教啊。。。
2008-04-29 14:13
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
得分:0 
没有人援手吗?
2008-04-29 22:44
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
先删除所有HTML标记,然后再操作不就可以了?
<%
Function cutStr(str)
'去掉所有HTML标记
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="<(.[^>]*)>"
str=re.Replace(str,"")
set re=Nothing
Dim l,t,c,i
l=Len(str)
t=0
For i=1 to l
c=Abs(Asc(Mid(str,i,1)))
If c>255 Then
t=t+2
Else
t=t+1
End If

cutStr=str

Next
cutStr=Replace(cutStr,chr(10),"")
cutStr=Replace(cutStr,chr(13),"")
cutStr=Replace(cutStr,chr(32),"")
End Function
%>
<%=cutStr("<font color=red>hehe</font>")%>

2008-04-29 22:55
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
得分:0 
先谢了!
我代入程序中试试。。。
2008-04-29 23:56
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
灌水:今天ASP版第一帖

2008-04-30 00:01
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
得分:0 
总是出现函数语法错误的提示:
------------------------
Microsoft VBScript 编译器错误 (0x800A03EA)
语法错误
Function cutStr(str)
------------------------


我的原码如下:(能否帮我嵌合在一起呢?)
-------------------------------------------------
<td colspan="2" class="blog2">
<%
blogEntry = Replace(objRS("entry"), vbCrLf, "<br>")
IF Len(blogEntry) > 50 THEN
blogEntry=left(blogEntry,50)                
END IF
Response.Write(blogEntry)
%>
</td>
-------------------------------------------------

[[it] 本帖最后由 zslj 于 2008-4-30 00:22 编辑 [/it]]
2008-04-30 00:15
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
<%
Function cutStr(str)
'去掉所有HTML标记
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="<(.[^>]*)>"
str=re.Replace(str,"")
set re=Nothing
Dim l,t,c,i
l=Len(str)
t=0
For i=1 to l
c=Abs(Asc(Mid(str,i,1)))
If c>255 Then
t=t+2
Else
t=t+1
End If

cutStr=str

Next
cutStr=Replace(cutStr,chr(10),"")
cutStr=Replace(cutStr,chr(13),"")
cutStr=Replace(cutStr,chr(32),"")
End Function
%>

<td colspan="2" class="blog2">
<%
blogEntry = cutStr(objRS("entry"))
IF Len(blogEntry) > 50 THEN
blogEntry=left(blogEntry,50)               
END IF
Response.Write(blogEntry)
%>
</td>

2008-04-30 00:25
zslj
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-4-28
得分:0 
首先谢谢你耐心的指教。贴入后代码如下:
---------------------------------------------------------------------
<td colspan="2" class="blog2">
<%
Function cutStr(str)
'去掉所有HTML标记
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="<(.[^>]*)>"
str=re.Replace(str,"")
set re=Nothing
Dim l,t,c,i
l=Len(str)
t=0
For i=1 to l
c=Abs(Asc(Mid(str,i,1)))
If c>255 Then
t=t+2
Else
t=t+1
End If

cutStr=str

Next
cutStr=Replace(cutStr,chr(10),"")
cutStr=Replace(cutStr,chr(13),"")
cutStr=Replace(cutStr,chr(32),"")
End Function
%>

<%
blogEntry = cutStr(objRS("entry"))
IF Len(blogEntry) > 50 THEN
blogEntry=left(blogEntry,50)
blogEntry=blogEntry+" ......<a href=""index.asp?view=display&ID="&objRS("id")&"""><img src=""images/read.gif"" width=""25"" height=""22"" alt=""阅读全文"" border=""0"" align=""right"" valign=""bottom""></a>"
END IF
Response.Write(blogEntry)
%>
</td>
---------------------------------------------------------------------

但是,页面显示了错误信息:
---------------------------------------------------------------------
技术信息(用于支持人员)

错误类型:
Microsoft VBScript 编译器错误 (0x800A03EA)
语法错误
/免费空间blog/index.asp, line 62
Function cutStr(str)

浏览器类型:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
---------------------------------------------------------------------
注:这几天在网上试着找相关的截断函数来调试,均会告知“函数语法错误”,一直就不明白哪里有问题。
2008-04-30 01:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-211541-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.178773 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved