wake-up-neo.com

Klassischer ASP: Ich bekomme einen Typfehler, wenn ich nicht sollte

Ich habe eine Funktion, um HTML-kodierten Text wieder in HTML umzuwandeln. Normalerweise funktioniert das einwandfrei, aber aus irgendeinem Grund versuche ich es heute für Text zu verwenden und erhalte folgende Fehlermeldung:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'UnChkString'

/manage/solutions_delete.asp, line 22

Die Zeile, in der ich diese Funktion verwende, lautet:

<%= UnChkString(solution_desc) %>

Die Variable solution_desc lautet:

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

Das Feld, aus dem die Datenbank den solution_desc abruft, ist ein Textfeld.

Meine UnChkString-Funktion ist:

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

Die HTMLDecode-Funktion lautet:

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

Ich habe sogar versucht:

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

ohne Glück.

11
James

Manchmal ist es am besten, den Fehler nur sehr sorgfältig zu lesen. Betrachten Sie diesen Teil von VBS:

 DoStuff("Hello World")

Da DoStuff nicht definiert ist und es keinen Option Explicit gibt, bekomme ich:

Fehler: Typenkonflikt: 'DoStuff'

Ihr Fehler ist: Type mismatch: 'UnChkString'. Es beklagt sich nicht darüber, dass der Parameter übergeben wird, und beschwert sich über UnChkString selbst. Meine Vermutung ist, dass Sie die grundlegendsten VBScript-Programmierversuche begangen haben, Sie haben keinen Option Explicit an der Spitze Ihres Codes. Das ist ein Muss.

Aus unklaren Gründen hat der Code, den Sie bisher veröffentlicht haben, an dem Punkt, an dem <%= UnChkString(solution_desc) %> ausgeführt wird, keine Skriptvariable UnChkString vorhanden. Daher wird der Fehler angezeigt. Ich vermute, dass die Einbeziehung von Option Explicit das Problem aufdeckt (und Sie zwingt, alle Variablen zu Dim zu zwingen).

8
AnthonyWJones

Ich stimme mit der Meinung von Anthony überein, dass Sie Option Explicit oben auf Ihren ASP-Seiten verwenden sollten.

Ich vermute, dass die Ursache eine fehlende oder fehlerhafte Include-Datei ist

Ich kann dies mit dem Code unten replizieren, den ich entweder entferne 

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

oder verformen Sie den Anruf, indem Sie ihn in ändern

<!-#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>
4
Nicholas Murray

Um das Problem zu beheben, müssen Sie zuerst prüfen, ob die Zeichenfolge das Zeichen enthält.

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

Und..

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

Das sollte Ihr Type Mismatch Problem beheben. Frag mich nicht warum, es funktioniert einfach.

0
Control Freak

Ersetzen Sie string in vStr und ändern Sie sie geringfügig.

Versuchen Sie es so: -

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