2012-03-08 2 views
7

У меня есть функция для преобразования HTML-кодированного текста обратно в HTML. Он отлично работает нормально, но по какой-то причине, я пытаюсь использовать его на какой-нибудь текст сегодня, и получить следующее сообщение об ошибке:Классический ASP: я получаю ошибку несоответствия типа, когда я не должен

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 

EDIT

Я даже пробовал:

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

не повезло.

+0

Какая линия линии 22? – bfavaretto

+0

@bfavaretto '<% = UnChkString (solution_desc)%>' – James

+0

Возможно, вы получаете 'NULL' из БД? Произошла ли ошибка с приведенной вами строкой примера? – bfavaretto

ответ

7

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

DoStuff("Hello World") 

Поскольку DoStuff не определен ни там Option Explicit я получаю:

Error: Type mismatch: 'DoStuff'

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

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

+0

Я начал отвечать, говоря, что мне жаль, что это было так просто, но скрипт функций загружается автоматически на каждую страницу, но затем все равно проверяется. Вот почему. Сценарий моих функций не был включен в эту конкретную страницу. Спасибо. – James

0

Замените string на vStr и немного изменили.

Попробуйте так: -

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

Забыл упомянуть, что я уже пробовал это уже (разная переменная, конечно) без везения. В любом случае все пробовал, но все равно. – James

+0

@James: по-прежнему такая же ошибка msg или разные сообщения –

+0

Такое же сообщение об ошибке. – James

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

3

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

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

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

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

или malform вызов путем изменения его

<!-#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> 
Смежные вопросы