javascriptencodingtitanium

encodeURIComponent algorithm source code


I am developing an application in titanium using Javascript. I need an open source implementation of encodeURIComponent in Javascript.

Can anybody guide me or show me some implementation?


Solution

  • The specification for this function is in 15.1.3.4.


    Modern versions (2018) of V8 implement it in C++. See src/uri.h:

    // ES6 section 18.2.6.5 encodeURIComponenet (uriComponent)
    static MaybeHandle<String> EncodeUriComponent(Isolate* isolate,
                                                  Handle<String> component) {
    

    which calls into Encode defined in uri.cc.


    Older versions of V8 implemented it in JavaScript and distributed under the BSD license. See line 359 of src/uri.js.

    // ECMA-262 - 15.1.3.4
    function URIEncodeComponent(component) {
      var unescapePredicate = function(cc) {
        if (isAlphaNumeric(cc)) return true;
        // !
        if (cc == 33) return true;
        // '()*
        if (39 <= cc && cc <= 42) return true;
        // -.
        if (45 <= cc && cc <= 46) return true;
        // _
        if (cc == 95) return true;
        // ~
        if (cc == 126) return true;
    
        return false;
      };
    
      var string = ToString(component);
      return Encode(string, unescapePredicate);
    }
    

    It's not called encodeURIComponent there, but this code in the same file, esablishes the mapping:

    InstallFunctions(global, DONT_ENUM, $Array(
        "escape", URIEscape,
        "unescape", URIUnescape,
        "decodeURI", URIDecode,
        "decodeURIComponent", URIDecodeComponent,
        "encodeURI", URIEncode,
        "encodeURIComponent", URIEncodeComponent
      ));