您好,我有一个需要编辑的ASP脚本。 实际上,我需要重新设计它发送的电子邮件,因此我需要从中编辑HTML。
问题是 html(来自 asp 文件)在每一行上都有
HTML = HTML & ="
在其中(加上一些其他更改)。我需要从该ASP中获取HTML代码,删除开头html = html
部分,编辑双""
并将它们转换为单个"
(我需要逐个完成,因为变量中也有引号)。
然后,我用HTML重新设置了页面的样式,之后我需要将其转换回来,以便我可以将其集成到ASP中(基本上再次引入双"之类的)。
是的,我可以直接从 ASP 编辑 HTML,但我不知道它的外观,因为我无法运行脚本(它需要来自服务器的其他文件,我无法访问这些文件)。
问题:
有没有更好的方法
?直接预览我在ASP中正在做的事情的某种方法。或者也许是一个工具,让我从ASP HTML移动到HTML并更快地返回。
我当然知道我现在做的事情很愚蠢,所以一定有更好的方法。
您可以创建一个包含一些占位符的 html 模板文件,读入它,替换占位符,然后在您的电子邮件中使用它。省去了您继续使用变量构建 html 的麻烦。前面的答案提供了有关可能的解决方案的更多详细信息(带有代码示例)。
@steve-holland提到的那样,创建模板是避免代码中所有烦人的HTML字符串的好方法,并使更改布局变得轻而易举。
我过去曾自己处理过 HTML 模板脚本,通常我会构建一个包含我将在模板中替换的键值对的Scripting.Dictionary
。
Function getHTMLTemplate(url, params)
Dim stream, keys, html, idx
Set stream = Server.CreateObject("ADODB.Stream")
With stream
.Type = adTypeText
.Charset = "utf-8"
Call .Open()
Call .LoadFromFile(url)
html = .ReadText(adReadAll)
Call .Close()
End With
Set stream = Nothing
keys = o_params.Keys
For idx = 0 To UBound(keys, 1)
html = Replace(html, keys(idx), params.Item(keys(idx)))
Next
Set keys = Nothing
Set params = Nothing
getHTMLTemplate = html
End Function
用法:
Dim params, html
Set params = Server.CreateObject("Scripting.Dictionary")
With params
.Add("[html_title]", "Title Here")
.Add("[html_logo]", "/images/logo.gif")
'... and so on
End With
html = getHTMLTemplate(Server.MapPath("/templates/main.htm"), params)
Call Response.Write(html)
示例main.htm
结构:
<!doctype html>
<html>
<head>
<title>[html_title]</title>
<link rel="stylesheet" type="text/css" href="/styles/main.css" />
</head>
<body>
<div class="header">
<img src="[html_logo]" alt="Company Name" />
</div>
</body>
</html>
为什么使用ADODB.Stream
而不是Scripting.FileSystemObject
?
您可以控制返回的
Charset
,如果需要,甚至可以从一个转换为另一个。如果模板特别大,则可以使用具有特定缓冲区大小的
Read()
方法流式传输内容,以提高读取性能。