web-dev-qa-db-ja.com

従来のASP:すべきでないときに型の不一致エラーが発生する

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_descfromはテキストフィールドです。

私の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)) %>

運がない。

11
James

エラーを注意深く読み直すのが最善の場合もあります。 VBSのこのチャンクを考えてみましょう。

_ DoStuff("Hello World")
_

DoStuffが定義されておらず、_Option Explicit_も存在しないため、次のようになります。

エラー:タイプの不一致: 'DoStuff'

エラーは次のとおりです:_Type mismatch: 'UnChkString'_。パラメータが渡されることについて文句を言わないことは、UnChkString自体について文句を言うことです。私の推測では、あなたは最も基本的なVBScriptプログラミンググーフをコミットしました。コードの先頭に_Option Explicit_がありません。これは必須です。

理由が不明なため、これまでに投稿したコードの<%= UnChkString(solution_desc) %>が実行されている時点のコードには、スクリプトエンジンに関数UnChkStringがないため、エラーが表示されます。 _Option Explicit_を含めると、問題が明らかになると思います(また、すべての変数をDimする必要があります)。

8
AnthonyWJones

ASPページの上部でOptionExplicitを使用する必要があるというAnthonyの意見に同意します。

原因はインクルードファイルの欠落または形式の誤りであると思われます

以下のコードでこれを複製できます。

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

これを修正するには、最初に文字列に文字が含まれているかどうかを確認する必要があります。これを実行します。

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
Control Freak

stringvStrに置き換え、少し変更します。

この方法を試してください:-

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