The GetFieldValue method had a bug in it that I corrected below. That's the
problem with trying to post my code immediately after I start to use it a
little.
[<br clear="all"><code class="LotusScript">Public Class RequestContentParser<br>
Private psRC As String<br>
Private piAmpPos As Integer<br>
<br>
Sub new(Byval sRequest_Content As String)<br>
psRC = sRequest_Content<br>
piAmpPos = 0<br>
End Sub<br>
<br>
Private Function Unescape(Byval s As String) As String<br>
Dim iPercent As Integer<br>
Dim iPlus As Integer<br>
Dim sL As String<br>
Dim sM As String<br>
Dim sR As String<br>
<br>
iPercent = Instr(s,"%")<br>
iPlus = Instr(s,"+")<br>
If iPlus < iPercent And iPlus <> 0 Then<br>
sL = Left$(s, iPlus - 1)<br>
sR = Mid$(s, iPlus + 1)<br>
Unescape = sL + " " + Unescape(sR)<br>
Elseif iPercent <> 0 Then<br>
sL = Left$(s,iPercent-1)<br>
sM = Mid$(s,iPercent+1,2)<br>
sR = Mid$(s, iPercent+3)<br>
Unescape = sL + Chr$(Cint("&h" & sM)) + Unescape(sR)<br>
Else<br>
Unescape = s<br>
End If<br>
End Function<br>
<br>
Public Function GetNextField(sFieldName As String, sValue As String) As
Variant 'boolean, true if successful, false if no more fields<br>
Dim iEqPos As Integer<br>
Dim iFieldPos As Integer<br>
<br>
On Error 1 Goto ErrorSub<br>
If piAmpPos = -1 Then Error 1<br>
iFieldPos = piAmpPos + 1<br>
iEqPos = Instr(iFieldPos, psRC, "=")<br>
If iEqPos = 0 Then Error 1<br>
sFieldName = Mid(psRC, iFieldPos, iEqPos - iFieldPos)<br>
piAmpPos = Instr(iEqPos, psRC, "&")<br>
If piAmpPos <> 0 Then<br>
sValue = Unescape(Mid(psRC, iEqPos + 1, piAmpPos - iEqPos -
1))<br>
Else<br>
sValue = Unescape(Mid(psRC, iEqPos + 1))<br>
piAmpPos = -1 'flag that there are no more fields<br>
End If<br>
GetNextField = True<br>
ExitSub:<br>
Exit Function<br>
ErrorSub:<br>
GetNextField = False<br>
Resume ExitSub<br>
End Function<br>
<br>
Public Function GetFieldValue(sFieldName As String) As String<br>
Dim iAmpPos As Integer<br>
Dim iFieldPos As Integer<br>
Dim iValPos As Integer<br>
Dim sValue As String<br>
<br>
iFieldPos = Instr("&" + psRC, "&" + sFieldName + "=")<br>
If iFieldPos = 0 Then<br>
GetFieldValue = ""<br>
Else<br>
iValPos = iFieldPos + 1 + Len(sFieldName)<br>
iAmpPos = Instr(iValPos, psRC, "&")<br>
If iAmpPos = iValPos Then<br>
GetFieldValue = ""<br>
Else<br>
GetFieldValue = Unescape(Mid(psRC, iValPos, iAmpPos -
iValPos))<br>
End If<br>
End If<br>
End Function<br>
End Class</code>]
(second try for better formatting)
The GetFieldValue method had a bug in it that I corrected below. That's the problem with trying to post my code immediately after I start to use it a little.
[<br clear="all"><code class="LotusScript">Public Class RequestContentParser<br> Private psRC As String<br> Private piAmpPos As Integer<br> <br> Sub new(Byval sRequest_Content As String)<br> psRC = sRequest_Content<br> piAmpPos = 0<br> End Sub<br> <br> Private Function Unescape(Byval s As String) As String<br> Dim iPercent As Integer<br> Dim iPlus As Integer<br> Dim sL As String<br> Dim sM As String<br> Dim sR As String<br> <br> iPercent = Instr(s,"%")<br> iPlus = Instr(s,"+")<br> If iPlus < iPercent And iPlus <> 0 Then<br> sL = Left$(s, iPlus - 1)<br> sR = Mid$(s, iPlus + 1)<br> Unescape = sL + " " + Unescape(sR)<br> Elseif iPercent <> 0 Then<br> sL = Left$(s,iPercent-1)<br> sM = Mid$(s,iPercent+1,2)<br> sR = Mid$(s, iPercent+3)<br> Unescape = sL + Chr$(Cint("&h" & sM)) + Unescape(sR)<br> Else<br> Unescape = s<br> End If<br> End Function<br> <br> Public Function GetNextField(sFieldName As String, sValue As String) As Variant 'boolean, true if successful, false if no more fields<br> Dim iEqPos As Integer<br> Dim iFieldPos As Integer<br> <br> On Error 1 Goto ErrorSub<br> If piAmpPos = -1 Then Error 1<br> iFieldPos = piAmpPos + 1<br> iEqPos = Instr(iFieldPos, psRC, "=")<br> If iEqPos = 0 Then Error 1<br> sFieldName = Mid(psRC, iFieldPos, iEqPos - iFieldPos)<br> piAmpPos = Instr(iEqPos, psRC, "&")<br> If piAmpPos <> 0 Then<br> sValue = Unescape(Mid(psRC, iEqPos + 1, piAmpPos - iEqPos - 1))<br> Else<br> sValue = Unescape(Mid(psRC, iEqPos + 1))<br> piAmpPos = -1 'flag that there are no more fields<br> End If<br> GetNextField = True<br> ExitSub:<br> Exit Function<br> ErrorSub:<br> GetNextField = False<br> Resume ExitSub<br> End Function<br> <br> Public Function GetFieldValue(sFieldName As String) As String<br> Dim iAmpPos As Integer<br> Dim iFieldPos As Integer<br> Dim iValPos As Integer<br> Dim sValue As String<br> <br> iFieldPos = Instr("&" + psRC, "&" + sFieldName + "=")<br> If iFieldPos = 0 Then<br> GetFieldValue = ""<br> Else<br> iValPos = iFieldPos + 1 + Len(sFieldName)<br> iAmpPos = Instr(iValPos, psRC, "&")<br> If iAmpPos = iValPos Then<br> GetFieldValue = ""<br> Else<br> GetFieldValue = Unescape(Mid(psRC, iValPos, iAmpPos - iValPos))<br> End If<br> End If<br> End Function<br> End Class</code>]