最近在zblog文章发布时pre的使用上遇到一点问题,那就是pre标签的内容在发布后换行符
会自动转义,即是把换行符“
”换成了“VBCrLf”,但是在内容编辑的时候,并没有把“VBCrLf”换成“
”,这样就导致pre里的内容不再换行,需再手动换行,这就给文章编辑带来很大的不便。
如何才能不让pre标签里的内容发布后转义呢?我研究了一下zblog的源码,发现可以通过修改源代码来实现要求。
打开文件
\function\c_system_event.asp
然后找到函数
Function PostArticle()
修改一下
Case "fckeditor"
里的代码,在代码
objArticle.Content=Request.Form("txaContent")
下面,添加如下代码:
'pre回车键转义
Dim myRe, mymatch, mymatchs, myhtm
myhtm = ""
set myRe = new RegExp
myre.IgnoreCase =True
myre.Global = True
myre.Pattern = "
]*?)>([\s\S]*?)"
Set mymatchs = myre.Execute(objArticle.Content)
for each mymatch in mymatchs
myhtm = replace(mymatch.SubMatches(1),vbCrLf,"
")
myhtm = replace(myhtm,vbLf,"
")
objArticle.Content=Replace(objArticle.Content,mymatch.SubMatches(1),myhtm)
next
set mymatchs = nothing
最终代码如下:
'/
'*********************************************************
' 目的: Post Article
'*********************************************************
Function PostArticle()
... ...
Case "fckeditor"
objArticle.Content=Request.Form("txaContent")
'pre回车键转义 Dim myRe, mymatch, mymatchs, myhtm
myhtm = ""
set myRe = new RegExp
myre.IgnoreCase =True
myre.Global = True
myre.Pattern = "
]*?)>([\s\S]*?)"
Set mymatchs = myre.Execute(objArticle.Content)
for each mymatch in mymatchs
myhtm = replace(mymatch.SubMatches(1),vbCrLf,"
")
myhtm = replace(myhtm,vbLf,"
")
objArticle.Content=Replace(objArticle.Content,mymatch.SubMatches(1),myhtm)
next
set mymatchs = nothing
If objArticle.Intro="" Then
s=objArticle.Content
... ...
通过这样修改,文章发布后,pre标签里的内容换行符“
”就不会被转义成“VBCrLf”了。