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:
<p>Here is a description of what this solution is all about.</p>
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, "&" , 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
MODIFIER
J'ai même essayé:
<%= UnChkString(CStr(solution_desc)) %>
sans chance.
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).
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 = "<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>
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,"&") 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
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.
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