经典ASP:我不应该遇到类型不匹配错误

时间:2012-03-08 14:34:21

标签: asp-classic type-mismatch

我有一个将HTML编码文本转换回HTML的功能。它通常运行良好,但出于某种原因,我尝试在今天的某些文本上使用它,并得到以下错误:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'UnChkString'

/manage/solutions_delete.asp, line 22

我正在使用此功能的行是:

<%= UnChkString(solution_desc) %>

solution_desc变量是:

&lt;p&gt;Here is a description of what this solution is all about.&lt;/p&gt;

数据库从solution_desc拉出的字段是文本字段。

我的UnChkString功能是:

Function UnChkString(string)
    UnChkString = Replace(string,"[%]","%")
    UnChkString = HTMLDecode(UnChkString)
End Function

HTMLDecode功能是:

Function HTMLDecode(sText)
    Dim I
    sText = Replace(sText, "&amp;" , Chr(38))
    sText = Replace(sText, "&amp;" , "&")
    sText = Replace(sText, "&quot;", Chr(34))
    sText = Replace(sText, "&rsquo;", Chr(39))
    sText = Replace(sText, "&lt;"  , Chr(60))
    sText = Replace(sText, "&gt;"  , Chr(62))
    sText = Replace(sText, "&nbsp;", Chr(32))
    For I = 1 to 255
        sText = Replace(sText, "&#" & I & ";", Chr(I))
    Next
    HTMLDecode = sText
End Function

修改

我甚至尝试过:

<%= UnChkString(CStr(solution_desc)) %>

没有运气。

4 个答案:

答案 0 :(得分:8)

有时最好只是非常仔细地重新阅读错误。考虑一下VBS:

 DoStuff("Hello World")

由于DoStuff未定义,也没有Option Explicit我得到:

  

错误:类型不匹配:'DoStuff'

您的错误是:Type mismatch: 'UnChkString'。它没有抱怨参数传递它抱怨UnChkString本身。我的猜测是你已经提交了最基本的VBScript编程模式,你的代码顶部没有Option Explicit。这是必须的。

由于到目前为止您发布的代码不清楚的原因,<%= UnChkString(solution_desc) %>正在执行的代码,脚本引擎没有函数UnChkString,因此您看到的错误。我怀疑包含Option Explicit会揭示问题(以及强迫您Dim所有变量)。

答案 1 :(得分:4)

我同意Anthony的观点,即您应该在ASP页面的顶部使用Option Explicit。

我怀疑原因是遗失或格式错误的包含文件

我可以使用下面的代码复制它,我要么删除

<!--#include file="include-functions.asp"-->

或通过将其更改为

来使通话失真
<!-#include file="include-functions.asp"-->


include-functions.asp
<%
Function UnChkString(string)     
UnChkString = Replace(string,"[%]","%")     
UnChkString = HTMLDecode(UnChkString) 
End Function 
%>


index.asp
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
    <!--#include file="include-functions.asp"-->
<%

Dim solution_desc
solution_desc = "&lt;p&gt;Here is a description of what this solution is all     about.&lt;/p&gt;"


Function HTMLDecode(sText)     
Dim I     
sText = Replace(sText, "&amp;" , Chr(38))     
sText = Replace(sText, "&amp;" , "&")     
sText = Replace(sText, "&quot;", Chr(34))     
sText = Replace(sText, "&rsquo;", Chr(39))     
sText = Replace(sText, "&lt;"  , Chr(60))     
sText = Replace(sText, "&gt;"  , Chr(62))     
sText = Replace(sText, "&nbsp;", Chr(32))     
For I = 1 to 255         
sText = Replace(sText, "&#" & I & ";", Chr(I))     
Next     
HTMLDecode = sText 
End Function 

%>
<%= UnChkString(solution_desc) %> 
</body>
</html>

答案 2 :(得分:0)

string替换为vStr并略微修改。

尝试这种方式: -

Function UnChkString(vStr)
    vStr = Replace(vStr,"[%]","%")
    UnChkString = HTMLDecode(vStr)
End Function

答案 3 :(得分:0)

为了解决这个问题,您需要先检查字符串中是否包含字符,然后执行此操作。

Function HTMLDecode(byVal sText)
    HTMLDecode = sText
    If Instr(HTMLDecode,"&amp;") Then HTMLDecode = Replace(HTMLDecode, "&amp;" , Chr(38))
    If Instr(HTMLDecode,"&amp;") Then HTMLDecode = Replace(HTMLDecode, "&amp;" , "&")
    If Instr(HTMLDecode,"&quot;") Then HTMLDecode = Replace(HTMLDecode, "&quot;", Chr(34))
    If Instr(HTMLDecode,"&rsquo;") Then HTMLDecode = Replace(HTMLDecode, "&rsquo;", Chr(39))
    If Instr(HTMLDecode,"&lt;") Then HTMLDecode = Replace(HTMLDecode, "&lt;"  , Chr(60))
    If Instr(HTMLDecode,"&gt;") Then HTMLDecode = Replace(HTMLDecode, "&gt;"  , Chr(62))
    If Instr(HTMLDecode,"&nbsp;") Then HTMLDecode = Replace(HTMLDecode, "&nbsp;", Chr(32))

    For I = 1 to 255
        If Instr(HTMLDecode, "&#" & I & ";") Then HTMLDecode = Replace(HTMLDecode, "&#" & I & ";", Chr(I))
    Next
End Function

和..

 Function UnChkString(vStr)
     UnChkString = vStr
     If Instr(vStr,"[%]") Then vStr = Replace(vStr,"[%]","%")
 End Function

这应解决您的Type Mismatch问题。不要问我为什么,它只是有效。