Difference between revisions of "EscapeXML"

From Second Life Wiki
Jump to navigation Jump to search
(New page: =====EscapeXML===== <lsl> // Escape standard reserved XML chars with entities // Copyright 2008, JB Kraft // Released under BSD license // http://www.opensource.org/licenses/bsd-license.p...)
 
m (<lsl> tag to <source>)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=====EscapeXML=====
=====EscapeXML=====


<lsl>
<source lang="lsl2">// Escape standard reserved XML chars with entities
// Escape standard reserved XML chars with entities
// Copyright 2008, JB Kraft & Strife Onizuka
// Copyright 2008, JB Kraft
// Released under BSD license
// Released under BSD license
// http://www.opensource.org/licenses/bsd-license.php
// http://www.opensource.org/licenses/bsd-license.php
Line 13: Line 12:
string escapeXML( string str )
string escapeXML( string str )
{
{
     list escapeChars = ["&","&amp;","\"","&quot;","'","&#039","<","&lt;",">","&gt;"];
     integer i = llStringLength( str );
   
    if(i)
    integer i;
    {
    integer ndx;
        string unescapedChars = "&\"'<>";
    for( i = 0; i < llStringLength( str ); i++ ) {
        list escapedChars = ["&amp;", "&quot;", "&#39;", "&lt;", "&gt;"];
        ndx = llListFindList( escapeChars, [llGetSubString(str, i, i)]);
        integer ndx;
        if( ndx != -1 ) {
 
            // start
        do
            if( i == 0 ) {
            if( ~(ndx = llSubStringIndex( unescapedChars, llGetSubString(str, --i, i))) )
                 str = llList2String( escapeChars, ndx+1) + llGetSubString( str, i+1, -1 );
                 str = llInsertString( llDeleteSubString( str, i, i), i, llList2String( escapedChars, ndx));
            }
        while(i);
            // end
            else if( i == llStringLength( str ) - 1) {
                str = llGetSubString( str, 0, -2) + llList2String( escapeChars, ndx+1);
            }
            //  middle
            else {
                str = llGetSubString( str, 0, i-1) + llList2String( escapeChars, ndx+1)
                    + llGetSubString( str, i+1, -1 );
            }
            i += llStringLength( llList2String( escapeChars, ndx+1));
        }
     }
     }
     return str;
     return str;
Line 48: Line 36:
         llSay(0, escapeXML("<Black> & \"White\" & 'Red' & <Green>"));
         llSay(0, escapeXML("<Black> & \"White\" & 'Red' & <Green>"));
     }
     }
}
}</source>
 


</lsl>
[[Category:LSL Examples]]
[[Category:LSL Examples]]

Latest revision as of 13:50, 24 January 2015

EscapeXML
// Escape standard reserved XML chars with entities
// Copyright 2008, JB Kraft & Strife Onizuka
// Released under BSD license
// http://www.opensource.org/licenses/bsd-license.php


// ------------------------------------------------------------------------
// escape standard reserved XML chars with entities
// ------------------------------------------------------------------------
string escapeXML( string str )
{
    integer i = llStringLength( str );
    if(i)
    {
        string unescapedChars = "&\"'<>"; 
        list escapedChars = ["&amp;", "&quot;", "&#39;", "&lt;", "&gt;"];
        integer ndx;

        do
            if( ~(ndx = llSubStringIndex( unescapedChars, llGetSubString(str, --i, i))) )
                str = llInsertString( llDeleteSubString( str, i, i), i, llList2String( escapedChars, ndx));
        while(i);
    }
    return str;
}

// ------------------------------------------------------------------------
// D E F A U L T
// ------------------------------------------------------------------------
default
{
    state_entry()
    {
        llSay(0, escapeXML("<Black> & \"White\" & 'Red' & <Green>"));
    }
}