我有一个将HTML编码文本转换回HTML的功能。它通常运行良好,但出于某种原因,我尝试在今天的某些文本上使用它,并得到以下错误:
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'UnChkString'
/manage/solutions_delete.asp, line 22
我正在使用此功能的行是:
<%= UnChkString(solution_desc) %>
solution_desc
变量是:
<p>Here is a description of what this solution is all about.</p>
数据库从solution_desc
拉出的字段是文本字段。
我的UnChkString功能是:
Function UnChkString(string)
UnChkString = Replace(string,"[%]","%")
UnChkString = HTMLDecode(UnChkString)
End Function
HTMLDecode功能是:
Function HTMLDecode(sText)
Dim I
sText = Replace(sText, "&" , Chr(38))
sText = Replace(sText, "&" , "&")
sText = Replace(sText, """, Chr(34))
sText = Replace(sText, "’", Chr(39))
sText = Replace(sText, "<" , Chr(60))
sText = Replace(sText, ">" , Chr(62))
sText = Replace(sText, " ", Chr(32))
For I = 1 to 255
sText = Replace(sText, "&#" & I & ";", Chr(I))
Next
HTMLDecode = sText
End Function
修改
我甚至尝试过:
<%= UnChkString(CStr(solution_desc)) %>
没有运气。
答案 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 = "<p>Here is a description of what this solution is all about.</p>"
Function HTMLDecode(sText)
Dim I
sText = Replace(sText, "&" , Chr(38))
sText = Replace(sText, "&" , "&")
sText = Replace(sText, """, Chr(34))
sText = Replace(sText, "’", Chr(39))
sText = Replace(sText, "<" , Chr(60))
sText = Replace(sText, ">" , Chr(62))
sText = Replace(sText, " ", 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,"&") Then HTMLDecode = Replace(HTMLDecode, "&" , Chr(38))
If Instr(HTMLDecode,"&") Then HTMLDecode = Replace(HTMLDecode, "&" , "&")
If Instr(HTMLDecode,""") Then HTMLDecode = Replace(HTMLDecode, """, Chr(34))
If Instr(HTMLDecode,"’") Then HTMLDecode = Replace(HTMLDecode, "’", Chr(39))
If Instr(HTMLDecode,"<") Then HTMLDecode = Replace(HTMLDecode, "<" , Chr(60))
If Instr(HTMLDecode,">") Then HTMLDecode = Replace(HTMLDecode, ">" , Chr(62))
If Instr(HTMLDecode," ") Then HTMLDecode = Replace(HTMLDecode, " ", 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
问题。不要问我为什么,它只是有效。