Test Encode / Decode embed data

by Ben Clayton

HTML

Input:   <input id='inp'/><br/>
Encoded: <input id='enc'/><br/>
<div id="enc2"></div>
Decoded: <input id='dec'/><br/>
<div id="mess"></div>

CSS

.mydata {
    width:400px;
}
.label {
    display:inline-block;
    width:200px;
}
input {
    width:500px;
}
#enc2 {
    margin-left:70px;
    height:24px;
}
}

JavaScript

function encodeEmbedString(s){
   var sout='';
    for (var i=0;i<s.length;i++){
        var c=s[i];
        var v=s.charCodeAt(i);
        if ( /[&;]/.test(c) ){
            sout+="\\"+c;
        }else if ( /[a-zA-Z0-9]/.test(c)){
            sout+=c;
        }else{
            sout+='&'+v+';';
        }
        
    }
 	return sout;
}

function decodeEmbedString(s){
    var esc=0;
    var state=0;
    var n=0;
    var sout='';
    for (var i=0;i<s.length;i++){
        var c=s[i];
        if(esc){
            sout+=c;
            esc=0;
        }else if ( c=='&' ){
            state=1;
            n=0;
        }else if(c==';'){
            sout+=String.fromCharCode(n)
            state=0;
        }else if(c=='\\'){
            esc=1;
        }else if(state){
            if(c!='#'){
                n=(n*10)+parseInt(c);
            }
        }else{
            sout+=c;
        }
    }
 	return sout;
}

function doit(){
    var i = $("#inp").val();
    var e=encodeEmbedString(i);
    var d=decodeEmbedString(e);
    $("#enc").val(e);
    $("#enc2").html(e);
    $("#dec").val(d);
    $("#mess").html((i==d)?'good':"<font color='red'>bad</font>")
}    
//debugger;
$("#inp").on('keyup',function(){doit()});
doit()