I'm using RTE for a year and it's one of the best. But I have a problem that I couldn't solve yet. When you send data over 120kb (this makes to much but belive me, RTE generates too long code if you copy from a Word document), RTE gives error. I searched internet and I found that IE can't send data over 120kb. Then I found a function that gets data over 120kb. I wrote the function below. Instead of using Request.Form I use FormFields function to get form values.
But this function also has some disadvantages. If you Set this function and then try to use any Request object, you get an error
Set FormFields = GetForm
strForm = Request("frmAction")
This code gives the following error;
Cannot use Request.Form collection after calling BinaryRead
So here's my question; how can I prevent this error. How can I use Request.Form AFTER calling BinaryRead? I have to use Request after FormFields function.
Thanks.......
Function GetForm
'Dictionary which will store source fields.
Dim FormFields
Set FormFields = CreateObject("Scripting.Dictionary")
'If there are some POST source data
If Request.Totalbytes>0 And _
Request.ServerVariables("HTTP_CONTENT_TYPE") = _
"application/x-www-form-urlencoded" Then
'Read the data
Dim SourceData
SourceData = Request.BinaryRead(Request.Totalbytes)
'Convert source binary data To a string
SourceData = RSBinaryToString(SourceData)
'Form fields are separated by "&"
SourceData = split(SourceData, "&")
Dim Field, FieldName, FieldContents
For Each Field In SourceData
'Field name And contents is separated by "="
Field = split(Field, "=")
FieldName = URLDecode(Field(0))
FieldContents = URLDecode(Field(1))
'Add field To the dictionary
FormFields.Add FieldName, FieldContents
Next
end if'Request.Totalbytes>0
Set GetForm = FormFields
End Function
Function URLDecode(ByVal What)
'URL decode Function
'2001 Antonin Foller, PSTRUH Software, http://www.motobit.com
Dim Pos, pPos
'replace + To Space
What = Replace(What, "+", " ")
on error resume Next
Dim Stream: Set Stream = CreateObject("ADODB.Stream")
If err = 0 Then 'URLDecode using ADODB.Stream, If possible
on error goto 0
Stream.Type = 2 'String
Stream.Open
'replace all %XX To character
Pos = InStr(1, What, "%")
pPos = 1
Do While Pos > 0
Stream.WriteText Mid(What, pPos, Pos - pPos) + _
Chr(CLng("&H" & Mid(What, Pos + 1, 2)))
pPos = Pos + 3
Pos = InStr(pPos, What, "%")
Loop
Stream.WriteText Mid(What, pPos)
'Read the text stream
Stream.Position = 0
URLDecode = Stream.ReadText
'Free resources
Stream.Close
Else 'URL decode using string concentation
on error goto 0
'UfUf, this is a little slow method.
'Do Not use it For data length over 100k
Pos = InStr(1, What, "%")
Do While Pos>0
What = Left(What, Pos-1) + _
Chr(Clng("&H" & Mid(What, Pos+1, 2))) + _
Mid(What, Pos+3)
Pos = InStr(Pos+1, What, "%")
Loop
URLDecode = What
End If
End Function
Function RSBinaryToString(Binary)
'Antonin Foller, http://www.motobit.com
'RSBinaryToString converts binary data (VT_UI1 | VT_ARRAY)
'to a string (BSTR) using ADO recordset
Dim RS, LBinary
Const adLongVarChar = 201
Set RS = CreateObject("ADODB.Recordset")
LBinary = LenB(Binary)
If LBinary>0 Then
RS.Fields.Append "mBinary", adLongVarChar, LBinary
RS.Open
RS.AddNew
RS("mBinary").AppendChunk Binary
RS.Update
RSBinaryToString = RS("mBinary")
Else
RSBinaryToString = ""
End If
End Function