$Web_URL_Decode and $Web_URL_Decode_Lstr

From m204wiki
Jump to navigation Jump to search

Do web URL decoding

$Web_URL_Decode and $Web_URL_Decode_Lstr decode strings encoded in the URL "% hex hex" format into unencoded strings. Strings in URL encoded format are generally found in URLs and form parameters, though the $Web_URL and $Web_Form functions automatically decode these strings.

Syntax

%out = $Web_URL_Decode( input_string )

$Web_URL_Decode takes a single string argument and returns that string with special characters encoded using the URL "% hex hex" format.

The only parameter is the input string to be decoded. If this string is omitted, a null string is returned.

Usage notes

  • $Web_URL_Decode_Lstr is identical to $Web_URL_Decode with the exception that it is Longstring capable. That is, it can take a longstring input and produce the appropriate longstring output.
  • $Web_URL_Decode and $Web_URL_Decode_Lstr provide the inverse functionality to $Web_URL_Encode and $Web_URL_Encode_Lstr. That is, instead of converting a string to the EBCDIC representation of its URL encoding, they convert an EBCDIC representation of a URL encoding of a string to that string. URL encoding and then decoding a string should produce the original input string, with the exception that $Web_URL_Encode, because it is non-longstring capable, can truncate its result.
  • $Web_URL_Decode and $Web_URL_Decode_Lstr are particularly useful in processing form fields when using the RAWINPUTONLY form processing. For example, the form fields for a post to a URL where RAWINPUTONLY is in effect can be loaded into a Stringlist as follows:

    %formParms is object stringList ... %formParms = new %formParms:parseLines($Web_Input_Content('TEXT'), ' &')

    This produces a Stringlist that contains items of the format fieldname=value. Assuming that none of the form field names have been URL encoded by the browser (a reasonable assumption for most Latin character field names), this Stringlist is in a format that can be readily searched. For example, the following code locates the field named OrderNumber:

    %itemNum = %formParms:locate('OrderNumber=', , 1, 12)

    Now, because there is no way to ensure that the end-user did not put special characters into the value for field OrderNumber, it is necessary to URL-decode the found value:

    if %itemNum then %order = $Lstr_Substr(%formParms:item(%itemNum), 13) %order = $web_url_decode_lstr(%order)

    Before this function was introduced, you would have to hope that the form field did not contain any URL encoded data, or would have to write one's own URL decoding function.