http://motevich.blogspot.com/2007/09/loadrunner-convert-text-to-url-format.html
LoadRunner - how to convert a plain text to URLformat
The task - How to convert a plain text string to URL-format in LoadRunner?
Several days ago I faced with a simple task - it was needed to convert a passedparameter (which was in a plain text form) to URL-format. In other words, I hadto convert:
The cause - Why it was needed?
LoadRunner script contained parameters, which should be passed to URL directly.Some my parameters contained special characters like spaces (" "),quotes ("), percentage ("%"), asterisks ("*") andothers. To be processed correctly by a browser and a web server, thesecharacters should be translated and passed as their hex-codes.
For example:
The ways on how to perform the task.
To perform this task I decided to use LoadRunner's web_convert_param function. Ididn't know at that time that this function does not satisfy my requirements.So, I was reluctant to write my own function EncodePlainToURL. Well, let'ssee both solutions.
char sIn[] ="t es%d$ +eprst_";
lr_save_string(sIn,"InputParam");
web_convert_param("InputParam", "SourceEncoding=PLAIN",
"TargetEncoding=URL", LAST);
lr_output_message("%s",lr_eval_string("{InputParam}"));
Press F5 toexecute the code, and.... H'm....
The input string "t es%d$ + eprst_" was converted to"t+es%25d%24+%2B+eprst_".
That means that space (" ") was converted to a plus("+"). I expected to see "%20" instead of a plus character.
Actually, it seems that "+" and "%20" are twins. Forexample Google uses a plus to encode a space within a search query. Forexample, if the query is "some text", then the URL will be:http://www.google.com/search?hl=en&q=some+text&btnG=Google+Search
I was tried to encode spaces (and others special characters) to theirhex-codes.
That's why the following function was written:
This is a codeof EncodePlainToURL function:
/*
* EncodePlainToURL converts aplain text string to an URL-form string.
*
* Parameters: sIn - input string to be encoded to URL format
* sOut - outputbuffer
* Note: the size of"sOut" parameter should be at least equal to triple size
* of "sIn"parameter plus one character(for end-terminator '\0')
*
* Author: Dmitry Motevich
*
* Examples: "a" -> "a"
* "a b" -> "a%20b"
* "ab_cc:\/c%" -> "a%20b%5Fcc%3A%2Fc%25"
*/
char*EncodePlainToURL(constchar*sIn,char*sOut)
{
int i;
char cCurChar;
char sCurStr[4] = {0};
sOut[0] ='\0';
for(i =0;cCurChar = sIn[i];i++)
{
//if this is a digit or an alphabetic letter
if(isdigit(cCurChar) || isalpha(cCurChar))
{
//then write the current character "as is"
sprintf(sCurStr,"%c",cCurChar);
}
else
{
//else convert it to hex-form. "_" -> "%5F"
sprintf(sCurStr,"%%%X",cCurChar);
}
//append current item to the output string
strcat(sOut,sCurStr);
}
return sOut;
}
The example of usage is:
char sIn[] ="t es%d$ + eprst_";
char sOut[100];
lr_output_message("%s", EncodePlainToURL(sIn,sOut));
Execute thecode, and see the result:
The input string "t es%d$ + eprst_" was converted to"t%20es%25d%24%20%2B%20eprst%5F".
Yeah! :)
All special characters (including spaces) were converted to hex-code, i.e. toURL-format!