一个关于在线编辑的问题

jwen_tang 2008-10-21 10:40:39
在请教这个问题之前,我也不知道该以什么标题来示人,问题不是太好描述,我举个例子来说明吧!
例:
通过在线编辑器提交到数据库保存起来的内容都是包含HTML代码的,并非纯文本内容,这样对于重新从数据库里面读出该字段内容进行处理的时候就遇到了一些小问题,比方说我本来存入的是一段文字“通过在线编辑器提交到数据库保存起来的内容都是包含HTML代码的”,存到数据库里面可能就是这样的内容“<font size='2'>    通过在线编辑器提交到数据库保存起来的内容都是包含HTML代码的</font>”,这样,对于我对读出来的字段进行如下操作的时候就不能达到我想要的效果,如通过left(,5)这个函数,我本意是想取“通过在线编”这五个字符,但最终结果读出来的却是"<font"这五个字符!
有一些朋友说用正则把html过滤掉再用left,但这样又遇到一个新的问题,HTML里面有的是包含有样式的,如果被正则替换掉了,那样式也就没有了,而且如果有插入图片的话,图片保存时去的是一个地址<img src='...' width='' height=''>这样的代码也都被替掉了!

现问各位论坛网友,可以什么办法予以解决!谢谢。。。
...全文
86 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwen_tang 2008-10-21
  • 打赏
  • 举报
回复
谢各位
ziyouren521125 2008-10-21
  • 打赏
  • 举报
回复
在你读取的时候截取不就可以了。
数据库该存什么存什么。
当你想用截取的时候在用正则把标签去掉。
  • 打赏
  • 举报
回复
没有一个是完美的,只能是在输入内容的时候有所规定了!

完美的真的没见到
Atai-Lu 2008-10-21
  • 打赏
  • 举报
回复
如果想保留格式的话,最好,也是最简单的方式还是手动截取吧

用代码的话,光想算法就够头痛的了...
  • 打赏
  • 举报
回复
'**************************************************
'函数名:gotTopic
'作 用:截字符串,汉字一个算两个字符,英文算一个字符
'参 数:str ----原字符串
' strlen ----截取长度
'返回值:截取后的字符串
'**************************************************
function gotTopic(str,strlen)
if str="" then
gotTopic=""
exit function
end if
dim l,t,c, i
str=replace(replace(replace(replace(str," "," "),""",chr(34)),">",">"),"<","<")
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
if t>=strlen then
gotTopic=left(str,i)
exit for
else
gotTopic=str
end if
next
gotTopic=replace(replace(replace(replace(gotTopic," "," "),chr(34),"""),">",">"),"<","<")
littlelam 2008-10-21
  • 打赏
  • 举报
回复


<%Class TLeft
Private c_Max, c_o, c_n, c_c, c_x, c_s
Private c_d, c_a, c_r

Private Sub Class_Initialize()
'c_Max 控制查找最大数
'c_o 控制是否继续查找
'c_n 记录字数
'c_c 记录未结束标记数
'c_x 无效未结束标记数
'c_s 预处理的String
'c_d 记录所有没有结尾的标记
'c_a 记录所有匹配出的内容
'c_r 公用正则对象
c_Max = 0
Set c_d = Server.CreateObject("Scripting.Dictionary")
Set c_a = Server.CreateObject("Scripting.Dictionary")
Set c_r = new RegExp
End Sub

Private Sub Class_Terminate
c_d.RemoveAll : Set c_d = Nothing
c_a.RemoveAll : Set c_a = Nothing
Set c_r = Nothing
End Sub

Private Sub Sd()
'set d
Dim m, i
c_r.Pattern = "<[^>]+\/>"
c_r.Global = True
Set m = c_r.Execute(c_s)
For i = 0 To m.Count - 1
c_d.Add i, m(i).Value
Next
c_s = c_r.Replace(c_s, "を")
End Sub

Private Function Ss()
'scan string
Dim a, i, s
s = toString(c_a) : a = Split(s, "を") : s = ""
For i = 0 To UBound(a)
s = s & a(i)
If i < UBound(a) - 1 Then s = s & c_d.Item(i)
Next
Ss = s
End Function

Private Function toString(o)
'dic toString
Dim a, i, s
a = o.Keys
For i = 0 To o.Count - 1
s = s & o.Item(a(i))
Next
toString = s
End Function

Private Sub Exec(a, b, i)
If a <> "" Then
If c_n < c_Max Then
If a <> "を" Then c_n = c_n + 1
c_a.Add i, a
End If
Else
If Instr(b, "</") = 1 Then
If c_n < c_Max Then
c_a.Add i, b
ElseIf c_x = 0 And c_c > 0 Then
c_a.Add i, b
If c_c = 1 Then c_o = False
Else
c_x = c_x - 1
End If
c_c = c_c - 1
Else
If c_n < c_Max Then
c_a.Add i, b
Else
c_x = c_x + 1
End If
c_c = c_c + 1
End If
End If
End Sub

Private Sub Start()
Dim m, i
Call Sd

c_r.Pattern = "(<[^>]+>)|([\S\s])"
c_r.Global = True
Set m = c_r.Execute(c_s)
For i = 0 To m.Count - 1
If c_o = False Then Exit For
Exec m(i).SubMatches(1), m(i).SubMatches(0), i
Next

End Sub

Public Property Get Parse(s, n)
'return String
c_o = True : c_Max = n : c_n = 0 : c_c = 0 : c_x = 0 : c_s = s
c_a.RemoveAll : c_d.RemoveAll
Call Start
Parse = Ss
End Property
End Class

Dim wc, strng : strng = "<font color=""red"" size=""2""><strong><img src=""csdn"" />String</strong>" _
& "<b><img src=""csdn"" />String</b></font><div></div>"
Set wc = new TLeft
With Response
.Write Server.HTMLEncode(wc.Parse(strng, 1))
.Write "<hr />"
.Write Server.HTMLEncode(wc.Parse(strng, 6))
.Write "<hr />"
.Write Server.HTMLEncode(wc.Parse(strng, 7))
End With
Set wc = Nothing
%>

一个高人写的“截取含html的字符串”
sy_binbin 2008-10-21
  • 打赏
  • 举报
回复
那就比较麻烦了!
现在我还没发现有什么好的办法解决这个问题的!


以前看过一篇文章讲的是文章内容分页的,给了一段代码,解决文章内里有表格的时候怎么去分页的。

后来找不倒了!
jwen_tang 2008-10-21
  • 打赏
  • 举报
回复
就是要保留样式的,而且还有遇到了IMG标签的这种情况
Atai-Lu 2008-10-21
  • 打赏
  • 举报
回复
如果你还想保留样式的话...
那么将会比较麻烦
Atai-Lu 2008-10-21
  • 打赏
  • 举报
回复

'//--清除html代码--//
Function clearHtml(fstr)
Set regEx = New RegExp
regEx.Pattern = "<\/?[^>]*>"
regEx.IgnoreCase = true
regEx.Global = true
set re = regEx.execute(fstr)
fstr = regEx.Replace(fstr,"")
fstr = Replace(fstr," "," ")
clearHtml = fstr
Set reg=Nothing
End Function
'//调用这个函数,清除所有的html代码之后再对字符串进行截取
skywdq 2008-10-21
  • 打赏
  • 举报
回复
看一下。还不错。主要用一下

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧