Difference between revisions of "LlEscapeURL"

From Second Life Wiki
Jump to navigation Jump to search
m (added some background information and code tags, wikipedia links, etc.)
m (replaced example script with the one from llUnescapeURL which makes it more clear what happens both ways)
Line 26: Line 26:
|constants
|constants
|examples=<lsl>
|examples=<lsl>
// Provides a clickable link to the LSL Portal by escaping the space in the title
string str = "http://wiki.secondlife.com/wiki/LSL Portal";
// "LSL Portal" here becomes "LSL%20Portal"
 
string title = "LSL Portal";
 
default
default
{
{
     state_entry()
     state_entry()
     {
     {
         llOwnerSay("http://wiki.secondlife.com/wiki/" + llEscapeURL(title));
         llOwnerSay("Plain string:\n\t" + str);
        // output: "http://wiki.secondlife.com/wiki/LSL Portal"
        llOwnerSay("Escaped string:\n\t" + llEscapeURL(str));
        // output: "http%3A%2F%2Fwiki%2Esecondlife%2Ecom%2Fwiki%2FLSL%20Portal"
        llOwnerSay("Escaped string unescaped again:\n\t" + llUnescapeURL( llEscapeURL(str) ));
        // output: "http://wiki.secondlife.com/wiki/LSL Portal"
        // because escaping and unescaping are exact opposite
        // and unescaping an escaped string returns the original
        //  For readability's sake it would make more sense to do:
        llOwnerSay("For readability's sake:\n\t" + "http://wiki.secondlife.com/wiki/" + llEscapeURL("LSL Portal"));
        // output: "http://wiki.secondlife.com/wiki/LSL%20Portal"
     }
     }
}
}

Revision as of 00:59, 24 January 2014

Summary

Function: string llEscapeURL( string url );
0.0 Forced Delay
10.0 Energy

Returns a string that is the escaped/encoded version of url, replacing spaces with "%20" etc. The function will escape any character not in [a-zA-Z0-9] to "%xx" where "xx" is the "Wikipedia logo"hexadecimal value of the character in "Wikipedia logo"UTF-8 "Wikipedia logo"byte form.

• string url A valid and unescaped URL.

To clarify, numbers and ASCII7 alphabetical characters are NOT escaped. If a character requires more then one byte in "Wikipedia logo"UTF-8 "Wikipedia logo"byte form then it returns multiple "%xx" sequences chained together.

This function is similar to functions (e.g. rawurlencode, encodeURIComponent) found in many other languages: 
PHP
rawurlencode
ECMAScript
encodeURIComponent

Caveats

The function is not appropriate for escaping a url all at once, because the ":" after the protocol, and all of the "/" characters delimiting the various parts, will be escaped. Instead, build the url in parts; escaping parts of the path and query string arguments as needed.

Sample url: https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/foo/bar?arg=gra

description of url part example
Base url https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322
Trailing path information /foo/bar
Any query arguments, the text past the first "?" in the url arg=gra

Examples

<lsl> string str = "http://wiki.secondlife.com/wiki/LSL Portal";

default {

   state_entry()
   {
       llOwnerSay("Plain string:\n\t" + str);
       // output: "http://wiki.secondlife.com/wiki/LSL Portal"

       llOwnerSay("Escaped string:\n\t" + llEscapeURL(str));
       // output: "http%3A%2F%2Fwiki%2Esecondlife%2Ecom%2Fwiki%2FLSL%20Portal"

       llOwnerSay("Escaped string unescaped again:\n\t" + llUnescapeURL( llEscapeURL(str) ));
       // output: "http://wiki.secondlife.com/wiki/LSL Portal"

       // because escaping and unescaping are exact opposite
       // and unescaping an escaped string returns the original


       //  For readability's sake it would make more sense to do:
       llOwnerSay("For readability's sake:\n\t" + "http://wiki.secondlife.com/wiki/" + llEscapeURL("LSL Portal"));
       // output: "http://wiki.secondlife.com/wiki/LSL%20Portal"
   }

}

</lsl>

See Also

Functions

• llUnescapeURL

Articles

• UTF-8
• Base64

Deep Notes

History

  • Prior to SL versions 1.19.1.81992, this function was limited to returning a maximum of 254 characters. SVC-470

Signature

function string llEscapeURL( string url );