2012-03-08 25 views
7

Tôi có chức năng chuyển văn bản được mã hóa HTML trở lại HTML. Nó hoạt động tốt bình thường, nhưng đối với một số lý do, tôi cố gắng sử dụng nó trên một số văn bản ngày hôm nay, và nhận được lỗi sau:ASP cổ điển: Tôi gặp phải lỗi không khớp loại khi tôi không nên

Microsoft VBScript runtime error '800a000d' 

Type mismatch: 'UnChkString' 

/manage/solutions_delete.asp, line 22 

Dòng Tôi đang sử dụng chức năng này trên là:

<%= UnChkString(solution_desc) %> 

biến solution_desc là:

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

các lĩnh vực cơ sở dữ liệu được kéo solution_desc từ là một trường văn bản.

chức năng UnChkString của tôi là:

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

Chức năng HTMLDecode là:

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

Tôi thậm chí đã cố gắng:

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

không có may mắn.

+0

Dòng nào là dòng 22? – bfavaretto

+0

@bfavaretto '<% = UnChkString (solution_desc)%>' – James

+0

Có lẽ bạn đang nhận 'NULL' từ DB? Lỗi có xảy ra với chuỗi mẫu bạn đã đăng không? – bfavaretto

Trả lời

7

Đôi khi nó tốt nhất để chỉ đọc lại những lỗi rất cẩn thận. Hãy xem xét đoạn này của VBS:

DoStuff("Hello World") 

Kể từ DoStuff không được định nghĩa cũng không có một Option Explicit tôi nhận được:

Error: Type mismatch: 'DoStuff'

lỗi của bạn là: Type mismatch: 'UnChkString'. Nó không phàn nàn về tham số đang được thông qua phàn nàn của nó về số UnChkString. Đoán của tôi là bạn đã cam kết cơ bản nhất của VBScript programmming goofs, bạn không có một Option Explicit ở đầu mã của bạn. Đây là điều bắt buộc.

Vì lý do chưa rõ ràng, mã mà bạn đã đăng cho đến nay mã tại điểm <%= UnChkString(solution_desc) %> đang được thực thi, công cụ tập lệnh không có chức năng UnChkString, do đó bạn gặp lỗi. Tôi nghi ngờ rằng việc bao gồm Option Explicit sẽ tiết lộ sự cố (cũng như buộc bạn phải Dim tất cả các biến của bạn).

+0

Tôi bắt đầu trả lời rằng tôi muốn nó dễ dàng, nhưng kịch bản chức năng được tự động tải vào mỗi trang, nhưng sau đó kiểm tra. Đây là lý do. Tập lệnh chức năng của tôi không được bao gồm trong trang cụ thể này. Cảm ơn bạn. – James

0

Thay thế string thành vStr và sửa đổi đôi chút.

Hãy thử cách này: -

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

Quên đề cập đến rằng tôi đã thử rằng đã quá (biến khác nhau, tất nhiên) không có may mắn. Thử lại nó đi, nhưng vẫn giống nhau. – James

+0

@James: Vẫn cùng một thông báo lỗi hoặc thông điệp khác nhau –

+0

Thông báo lỗi tương tự. – James

0

Để khắc phục nó, bạn cần phải đầu tiên kiểm tra xem chuỗi có char trong nó, làm được điều này ..

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 

Và ..

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

Đó nên sửa chữa Type Mismatch của bạn vấn đề. Đừng hỏi tôi tại sao, nó chỉ hoạt động.

3

Tôi đồng ý với ý kiến ​​của Anthony rằng bạn nên sử dụng Option Explicit ở đầu trang ASP của bạn.

tôi nghi ngờ nguyên nhân là một thiếu hoặc bị thay đổi bao gồm tập tin

tôi có thể tái tạo này với mã bên dưới nơi tôi hoặc là loại bỏ

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

hoặc malform cuộc gọi bằng cách thay đổi nó để

<!-#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> 
Các vấn đề liên quan