Классический ASP: я получаю ошибку несоответствия типов, когда не должен - PullRequest
11 голосов
/ 08 марта 2012

У меня есть функция для преобразования текста в формате 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 ]

8 голосов
/ 09 марта 2012

Иногда лучше просто очень внимательно перечитать ошибку.Рассмотрим этот фрагмент VBS:

 DoStuff("Hello World")

Так как DoStuff не определен и не существует Option Explicit Я получаю:

Ошибка: Несоответствие типов: 'DoStuff'

Ваша ошибка: Type mismatch: 'UnChkString'.Он не жалуется на передаваемый параметр, а жалуется на UnChkString.Я предполагаю, что вы совершили самые основные глупости программирования на VBScript, у вас нет Option Explicit в начале вашего кода.Это необходимо.

По непонятным причинам укажите код, который вы разместили до сих пор. Код в момент выполнения <%= UnChkString(solution_desc) %> в скриптовом движке не имеет функции UnChkString, поэтому вы ошиблись.видя.Я подозреваю, что включение Option Explicit выявит проблему (а также заставит вас Dim всех ваших переменных).

4 голосов
/ 09 марта 2012

Я согласен с мнением Энтони о том, что вы должны использовать Option Explicit в верхней части своих страниц ASP.

Я подозреваю, что причиной является отсутствующий или неправильно сформированный включаемый файл

Я могу повторить это с кодом ниже, где я могу удалить

<!--#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>
0 голосов
/ 09 марта 2012

Для того, чтобы это исправить, вам нужно сначала проверить, есть ли в строке символ, сделайте это ..

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 проблему.Не спрашивай меня почему, это просто работает.

0 голосов
/ 08 марта 2012

Заменить string на vStr и слегка изменить.

Попробуйте сделать так: -

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