web-dev-qa-db-fra.com

ASP classique: je reçois une erreur d'incompatibilité de type alors que je ne devrais pas

J'ai une fonction pour transformer le texte codé HTML en HTML. Cela fonctionne très bien normalement, mais pour une raison quelconque, j'essaie de l'utiliser aujourd'hui sur du texte et j'obtiens le message d'erreur suivant:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'UnChkString'

/manage/solutions_delete.asp, line 22

La ligne sur laquelle j'utilise cette fonction est la suivante:

<%= UnChkString(solution_desc) %>

La variable solution_desc est:

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

Le champ dans lequel la base de données extrait le solution_desc est un champ de texte.

Ma fonction UnChkString est:

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

La fonction HTMLDecode est:

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

MODIFIER

J'ai même essayé:

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

sans chance.

11
James

Parfois, il est préférable de relire l’erreur très attentivement. Considérez ce morceau de VBS:

 DoStuff("Hello World")

Puisque DoStuff n'est pas défini, il n'y a pas de Option Explicit je reçois:

Erreur: incompatibilité de type: 'DoStuff'

Votre erreur est: Type mismatch: 'UnChkString'. Il ne se plaint pas du paramètre transmis, il se plaint de UnChkString lui-même. Mon hypothèse est que vous avez validé la plus élémentaire des gaffes de programmation VBScript, vous n'avez pas un Option Explicit en haut de votre code. C'est un must.

Pour des raisons obscures, dans le code que vous avez publié jusqu'à présent, au moment où <%= UnChkString(solution_desc) %> est en cours d'exécution, le moteur de script n'a pas de fonction UnChkString, d'où l'erreur que vous voyez. Je soupçonne que l’inclusion de Option Explicit révélera le problème (et vous obligera à Dim toutes vos variables).

8
AnthonyWJones

Je souscris à l'opinion d'Anthony selon laquelle vous devriez utiliser Option Explicit en haut de vos pages ASP.

Je soupçonne que la cause est un fichier inclus manquant ou mal formé

Je peux reproduire ceci avec le code ci-dessous où je supprime 

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

ou malformé l'appel en le changeant en

<!-#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

Pour résoudre ce problème, vous devez d’abord vérifier si la chaîne contient le caractère, faites ceci.

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

Et..

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

Cela devrait résoudre votre problème Type Mismatch. Ne me demandez pas pourquoi, ça marche.

0
Control Freak

Remplacez string par vStr et légèrement modifié.

Essayez de cette façon: -

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