Classic ASP删除无内容相邻<% %>、%><%标记后网页崩溃的原因是什么?
Classic ASP
%><%标签语法问题解答 Classic ASP默认使用VBScript作为脚本语言,解析器的核心规则是:
<%是服务端代码块的起始标记,%>是结束标记- 两个标记之外的所有内容,都会被解析器直接作为静态文本输出到响应中,不需要手动调用
Response.Write - 两个标记之内的内容,会被作为VBScript代码执行
为什么删除直接相邻的%><%会抛出错误
你当前代码里的%><%本质是分隔了两段不完整的服务端代码,中间夹着需要静态输出的HTML内容。比如你代码中的这段:
response.write "<option value=" & RT.Fields("id") %>" <% if cstr(RT.Fields("id")) = selection then
如果直接删除%>" <%这部分,代码会变成:
response.write "<option value=" & RT.Fields("id") if cstr(RT.Fields("id")) = selection then
这就出现了两个语法问题:
- 前一行的
Response.Write语句没有结束,直接接if关键字不符合VBScript语法 - 原本要静态输出的属性闭合双引号
"被删除,生成的HTML结构不完整
为什么需要保留%>"<%这类写法
这是Classic ASP开发时期的常用拼接技巧:不需要把所有HTML内容都放到Response.Write里输出,直接把固定的HTML字符放在代码块外,既可以减少字符串拼接的代码量,也能避免引号转义的问题。你代码里这个写法就是为了输出option标签value属性的闭合双引号,不需要额外写Response.Write """来输出双引号,简化写法。
代码简化方案
你可以把所有HTML输出都合并到服务端代码里,去掉不必要的代码块跳转,简化后的代码参考:
<% Function FunctionName(name, selection) ' 输出select起始标签 Response.Write "<select name=""" & name & """>" Set RTConn = Server.CreateObject("ADODB.Connection") RTConn.Open("Provider=SQLOLEDB;Password=three4me;Persist Security Info=True;User ID=sa;Initial Catalog=DATABASE;Data Source=SERVER") Set RT = Server.CreateObject("ADODB.Recordset") sqlQuery = "SELECT DISTINCT id, Replace(Name, ' ', ' ') AS Name, Num, Address, City, State FROM RedactedTablename WHERE active = 1 OR ID = '" & selection & "' ORDER BY Replace(Name, ' ', ' '), State, City, Num" RT.Open sqlQuery, RTConn, 3, 3 Do While Not RT.EOF ' 拼接option的value部分 Response.Write "<option value=""" & RT.Fields("id") & """" ' 判断是否选中 if cstr(RT.Fields("id")) = selection then Response.Write " selected" elseif (selection = "" OR selection = "0") AND trim(RT.Fields("Name")) = "NA" then Response.Write " selected" end if ' 拼接option显示内容 Response.Write ">" & RT.Fields("Name") if not RT.Fields("Name") = "NA" then Response.Write " (" & RT.Fields("City") & ", " & RT.Fields("State") & ") - " & RT.Fields("Num") end if ' 闭合option标签 Response.Write "</option>" RT.MoveNext Loop RT.Close RTConn.Close ' 闭合select标签 Response.Write "</select>" End function %>
优化后所有逻辑都在同一个代码块内,不需要反复切换代码块和静态内容,完全可以删掉所有零散的%>和<%标记,适配你要调用独立ASP文件输出内容的需求。
内容的提问来源于stack exchange,提问作者xarzu
相关产品推荐
相关产品推荐

