HTMLでエンコードされたテキストをHTMLに戻す機能があります。正常に動作しますが、何らかの理由で、今日いくつかのテキストで使用しようとすると、次のエラーが発生します。
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'UnChkString'
/manage/solutions_delete.asp, line 22
この関数を使用している行は次のとおりです。
<%= UnChkString(solution_desc) %>
solution_desc
変数は次のとおりです。
<p>Here is a description of what this solution is all about.</p>
データベースがプルしているフィールドsolution_desc
fromはテキストフィールドです。
私のUnChkString関数は次のとおりです。
Function UnChkString(string)
UnChkString = Replace(string,"[%]","%")
UnChkString = HTMLDecode(UnChkString)
End Function
HTMLDecode関数は次のとおりです。
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(CStr(solution_desc)) %>
運がない。
エラーを注意深く読み直すのが最善の場合もあります。 VBSのこのチャンクを考えてみましょう。
_ DoStuff("Hello World")
_
DoStuff
が定義されておらず、_Option Explicit
_も存在しないため、次のようになります。
エラー:タイプの不一致: 'DoStuff'
エラーは次のとおりです:_Type mismatch: 'UnChkString'
_。パラメータが渡されることについて文句を言わないことは、UnChkString
自体について文句を言うことです。私の推測では、あなたは最も基本的なVBScriptプログラミンググーフをコミットしました。コードの先頭に_Option Explicit
_がありません。これは必須です。
理由が不明なため、これまでに投稿したコードの<%= UnChkString(solution_desc) %>
が実行されている時点のコードには、スクリプトエンジンに関数UnChkString
がないため、エラーが表示されます。 _Option Explicit
_を含めると、問題が明らかになると思います(また、すべての変数をDim
する必要があります)。
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 = "<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>
これを修正するには、最初に文字列に文字が含まれているかどうかを確認する必要があります。これを実行します。
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
そして..
Function UnChkString(vStr)
UnChkString = vStr
If Instr(vStr,"[%]") Then vStr = Replace(vStr,"[%]","%")
End Function
これでType Mismatch
の問題が修正されるはずです。理由を聞かないでください、それはうまくいきます。
string
をvStr
に置き換え、少し変更します。
この方法を試してください:-
Function UnChkString(vStr)
vStr = Replace(vStr,"[%]","%")
UnChkString = HTMLDecode(vStr)
End Function