private static string Encode(object uri, URISetType flags) { string str = Microsoft.JScript.Convert.ToString(uri); StringBuilder bs = new StringBuilder(); for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (InURISet(ch, flags)) { bs.Append(ch); } else { int num2 = ch; if ((num2 >= 0) && (num2 <= 0x7f)) { AppendInHex(bs, num2); } else if ((num2 >= 0x80) && (num2 <= 0x7ff)) { AppendInHex(bs, (num2 >> 6) | 0xc0); AppendInHex(bs, (num2 & 0x3f) | 0x80); } else if ((num2 < 0xd800) || (num2 > 0xdfff)) { AppendInHex(bs, (num2 >> 12) | 0xe0); AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80); AppendInHex(bs, (num2 & 0x3f) | 0x80); } else { if ((num2 >= 0xdc00) && (num2 <= 0xdfff)) { throw new JScriptException(JSError.URIEncodeError); } if (++i >= str.Length) { throw new JScriptException(JSError.URIEncodeError); } int num3 = str[i]; if ((num3 < 0xdc00) || (num3 > 0xdfff)) { throw new JScriptException(JSError.URIEncodeError); } num2 = (((num2 - 0xd800) << 10) + num3) + 0x2400; AppendInHex(bs, (num2 >> 0x12) | 240); AppendInHex(bs, ((num2 >> 12) & 0x3f) | 0x80); AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80); AppendInHex(bs, (num2 & 0x3f) | 0x80); } } } return(bs.ToString()); }
private static String Encode(Object uri, URISetType flags) { String uriStr = Convert.ToString(uri); StringBuilder resultStr = new StringBuilder(); for (int i = 0; i < uriStr.Length; i++) { char ch = uriStr[i]; if (GlobalObject.InURISet(ch, flags)) { resultStr.Append(ch); } else { int value = (int)ch; if (value >= 0 && value <= 0x7F) { GlobalObject.AppendInHex(resultStr, value); } else if (value >= 0x0080 && value <= 0x07FF) { GlobalObject.AppendInHex(resultStr, value >> 6 | 0xC0); GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80); } else if (value < 0xD800 || value > 0xDFFF) { GlobalObject.AppendInHex(resultStr, value >> 12 | 0xE0); GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80); GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80); } else { if (value >= 0xDC00 && value <= 0xDFFF) { throw new JScriptException(JSError.URIEncodeError); } if (++i >= uriStr.Length) { throw new JScriptException(JSError.URIEncodeError); } int value1 = (int)uriStr[i]; if (value1 < 0xDC00 || value1 > 0xDFFF) { throw new JScriptException(JSError.URIEncodeError); } value = (value - 0xD800 << 10) + value1 + 0x2400; GlobalObject.AppendInHex(resultStr, value >> 18 | 0xF0); GlobalObject.AppendInHex(resultStr, value >> 12 & 0x3F | 0x80); GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80); GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80); } } } return(resultStr.ToString()); }
private static bool InURISet(char ch, URISetType flags) { if ((flags & URISetType.Unescaped) == URISetType.None) { goto Label_0066; } if ((((ch >= '0') && (ch <= '9')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= 'a') && (ch <= 'z'))) { return(true); } if (ch <= '.') { switch (ch) { case '\'': case '(': case ')': case '*': case '-': case '.': case '!': return(true); } goto Label_0066; } if ((ch != '_') && (ch != '~')) { goto Label_0066; } return(true); Label_0066: if ((flags & URISetType.Reserved) != URISetType.None) { switch (ch) { case '#': case '$': case '&': case '+': case ',': case '/': case ':': case ';': case '=': case '?': case '@': return(true); } } return(false); }
private static string Encode(string uri, URISetType flags) { System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); for (int i = 0; i < uri.Length; i++) { char c = uri[i]; if (InURISet(c, flags)) { stringBuilder.Append(c); continue; } int num = c; if (num >= 0 && num <= 127) { AppendInHex(stringBuilder, num); continue; } if (num >= 128 && num <= 2047) { AppendInHex(stringBuilder, (num >> 6) | 0xC0); AppendInHex(stringBuilder, (num & 0x3F) | 0x80); continue; } if (num < 55296 || num > 57343) { AppendInHex(stringBuilder, (num >> 12) | 0xE0); AppendInHex(stringBuilder, ((num >> 6) & 0x3F) | 0x80); AppendInHex(stringBuilder, (num & 0x3F) | 0x80); continue; } if (num >= 56320 && num <= 57343) { throw new JavaScriptException(JavaScriptError.URIEncodeError); } if (++i >= uri.Length) { throw new JavaScriptException(JavaScriptError.URIEncodeError); } int num2 = uri[i]; if (num2 < 56320 || num2 > 57343) { throw new JavaScriptException(JavaScriptError.URIEncodeError); } num = (num - 55296 << 10) + num2 + 9216; AppendInHex(stringBuilder, (num >> 18) | 0xF0); AppendInHex(stringBuilder, ((num >> 12) & 0x3F) | 0x80); AppendInHex(stringBuilder, ((num >> 6) & 0x3F) | 0x80); AppendInHex(stringBuilder, (num & 0x3F) | 0x80); } return(stringBuilder.ToString()); }
private static bool InURISet(char ch, URISetType flags) { if ((flags & URISetType.Unescaped) != URISetType.None) { if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') { return(true); } switch (ch) { case '-': case '_': case '.': case '!': case '~': case '*': case '\'': case '(': case ')': return(true); } } if ((flags & URISetType.Reserved) != URISetType.None) { switch (ch) { case ';': case '/': case '?': case ':': case '@': case '&': case '=': case '+': case '$': case ',': case '#': return(true); } } return(false); }
private static string Decode(object encodedURI, URISetType flags) { string str = Microsoft.JScript.Convert.ToString(encodedURI); StringBuilder builder = new StringBuilder(); for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch != '%') { builder.Append(ch); } else { char ch2; int startIndex = i; if ((i + 2) >= str.Length) { throw new JScriptException(JSError.URIDecodeError); } byte num3 = HexValue(str[i + 1], str[i + 2]); i += 2; if ((num3 & 0x80) == 0) { ch2 = (char)num3; } else { int num4 = 1; while (((num3 << num4) & 0x80) != 0) { num4++; } if (((num4 == 1) || (num4 > 4)) || ((i + ((num4 - 1) * 3)) >= str.Length)) { throw new JScriptException(JSError.URIDecodeError); } int num5 = num3 & (((int)0xff) >> (num4 + 1)); while (num4 > 1) { if (str[i + 1] != '%') { throw new JScriptException(JSError.URIDecodeError); } num3 = HexValue(str[i + 2], str[i + 3]); i += 3; if ((num3 & 0xc0) != 0x80) { throw new JScriptException(JSError.URIDecodeError); } num5 = (num5 << 6) | (num3 & 0x3f); num4--; } if ((num5 >= 0xd800) && (num5 < 0xe000)) { throw new JScriptException(JSError.URIDecodeError); } if (num5 < 0x10000) { ch2 = (char)num5; } else { if (num5 > 0x10ffff) { throw new JScriptException(JSError.URIDecodeError); } builder.Append((char)((((num5 - 0x10000) >> 10) & 0x3ff) + 0xd800)); builder.Append((char)(((num5 - 0x10000) & 0x3ff) + 0xdc00)); goto Label_01D4; } } if (InURISet(ch2, flags)) { builder.Append(str, startIndex, (i - startIndex) + 1); } else { builder.Append(ch2); } Label_01D4 :; } } return(builder.ToString()); }
private static String Decode(Object encodedURI, URISetType flags) { String encodedURIStr = Convert.ToString(encodedURI); StringBuilder resultStr = new StringBuilder(); for (int i = 0; i < encodedURIStr.Length; i++) { char ch = encodedURIStr[i]; if (ch != '%') { resultStr.Append(ch); } else { int start = i; if (i + 2 >= encodedURIStr.Length) { throw new JScriptException(JSError.URIDecodeError); } byte b = HexValue(encodedURIStr[i + 1], encodedURIStr[i + 2]); i += 2; char ch1; if ((b & 0x80) == 0) { ch1 = (char)b; } else { int n; for (n = 1; ((b << n) & 0x80) != 0; n++) { ; } if (n == 1 || n > 4 || i + (n - 1) * 3 >= encodedURIStr.Length) { throw new JScriptException(JSError.URIDecodeError); } int value = (int)b & 0xFF >> (n + 1); for (; n > 1; n--) { if (encodedURIStr[i + 1] != '%') { throw new JScriptException(JSError.URIDecodeError); } b = HexValue(encodedURIStr[i + 2], encodedURIStr[i + 3]); i += 3; // The two leading bits should be 10 for a valid UTF-8 encoding. if ((b & 0xC0) != 0x80) { throw new JScriptException(JSError.URIDecodeError); } value = value << 6 | (int)(b & 0x3F); } if (value >= 0xD800 && value < 0xE000) { throw new JScriptException(JSError.URIDecodeError); } if (value < 0x10000) { ch1 = (char)value; } else { if (value > 0x10FFFF) { throw new JScriptException(JSError.URIDecodeError); } resultStr.Append((char)((value - 0x10000 >> 10 & 0x3FF) + 0xD800)); resultStr.Append((char)((value - 0x10000 & 0x3FF) + 0xDC00)); continue; } } if (GlobalObject.InURISet(ch1, flags)) { resultStr.Append(encodedURIStr, start, i - start + 1); } else { resultStr.Append(ch1); } } } return(resultStr.ToString()); }
private static bool InURISet(char ch, URISetType flags){ if ((flags & URISetType.Unescaped) != URISetType.None){ if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') return true; switch (ch){ case '-': case '_': case '.': case '!': case '~': case '*': case '\'': case '(': case ')': return true; } } if ((flags & URISetType.Reserved) != URISetType.None){ switch (ch){ case ';': case '/': case '?': case ':': case '@': case '&': case '=': case '+': case '$': case ',': case '#': return true; } } return false; }
private static String Encode(Object uri, URISetType flags){ String uriStr = Convert.ToString(uri); StringBuilder resultStr = new StringBuilder(); for (int i = 0; i < uriStr.Length; i++){ char ch = uriStr[i]; if (GlobalObject.InURISet(ch, flags)) resultStr.Append(ch); else{ int value = (int)ch; if (value >= 0 && value <= 0x7F) GlobalObject.AppendInHex(resultStr, value); else if (value >= 0x0080 && value <= 0x07FF){ GlobalObject.AppendInHex(resultStr, value >> 6 | 0xC0); GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80); }else if (value < 0xD800 || value > 0xDFFF){ GlobalObject.AppendInHex(resultStr, value >> 12 | 0xE0); GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80); GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80); }else{ if (value >= 0xDC00 && value <= 0xDFFF) throw new JScriptException(JSError.URIEncodeError); if (++i >= uriStr.Length) throw new JScriptException(JSError.URIEncodeError); int value1 = (int)uriStr[i]; if (value1 < 0xDC00 || value1 > 0xDFFF) throw new JScriptException(JSError.URIEncodeError); value = (value - 0xD800 << 10) + value1 + 0x2400; GlobalObject.AppendInHex(resultStr, value >> 18 | 0xF0); GlobalObject.AppendInHex(resultStr, value >> 12 & 0x3F | 0x80); GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80); GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80); } } } return resultStr.ToString(); }
private static String Decode(Object encodedURI, URISetType flags){ String encodedURIStr = Convert.ToString(encodedURI); StringBuilder resultStr = new StringBuilder(); for (int i = 0; i < encodedURIStr.Length; i++){ char ch = encodedURIStr[i]; if (ch != '%') resultStr.Append(ch); else{ int start = i; if (i+2 >= encodedURIStr.Length) throw new JScriptException(JSError.URIDecodeError); byte b = HexValue(encodedURIStr[i+1], encodedURIStr[i+2]); i += 2; char ch1; if ((b & 0x80) == 0) ch1 = (char)b; else{ int n; for (n = 1; ((b << n) & 0x80) != 0; n++) ; if (n == 1 || n > 4 || i + (n-1) * 3 >= encodedURIStr.Length) throw new JScriptException(JSError.URIDecodeError); int value = (int)b & 0xFF >> (n+1); for (; n > 1; n--){ if (encodedURIStr[i+1] != '%') throw new JScriptException(JSError.URIDecodeError); b = HexValue(encodedURIStr[i+2], encodedURIStr[i+3]); i += 3; // The two leading bits should be 10 for a valid UTF-8 encoding. if ((b & 0xC0) != 0x80) throw new JScriptException(JSError.URIDecodeError); value = value << 6 | (int)(b & 0x3F); } if (value >= 0xD800 && value < 0xE000) throw new JScriptException(JSError.URIDecodeError); if (value < 0x10000) ch1 = (char)value; else{ if (value > 0x10FFFF) throw new JScriptException(JSError.URIDecodeError); resultStr.Append((char)((value - 0x10000 >> 10 & 0x3FF) + 0xD800)); resultStr.Append((char)((value - 0x10000 & 0x3FF) + 0xDC00)); continue; } } if (GlobalObject.InURISet(ch1, flags)) resultStr.Append(encodedURIStr, start, i-start+1); else resultStr.Append(ch1); } } return resultStr.ToString(); }
private static string Decode(string encodedURI, URISetType flags) { System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); for (int i = 0; i < encodedURI.Length; i++) { char c = encodedURI[i]; if (c != '%') { stringBuilder.Append(c); continue; } int num = i; if (i + 2 >= encodedURI.Length) { throw new JavaScriptException(JavaScriptError.URIDecodeError); } byte b = HexValue(encodedURI[i + 1], encodedURI[i + 2]); i += 2; char c2; if ((b & 0x80) == 0) { c2 = (char)b; } else { int j; for (j = 1; ((b << j) & 0x80) != 0; j++) { } if (j == 1 || j > 4 || i + (j - 1) * 3 >= encodedURI.Length) { throw new JavaScriptException(JavaScriptError.URIDecodeError); } int num2 = b & (255 >> j + 1); while (j > 1) { if (encodedURI[i + 1] != '%') { throw new JavaScriptException(JavaScriptError.URIDecodeError); } b = HexValue(encodedURI[i + 2], encodedURI[i + 3]); i += 3; if ((b & 0xC0) != 128) { throw new JavaScriptException(JavaScriptError.URIDecodeError); } num2 = ((num2 << 6) | (b & 0x3F)); j--; } if (num2 >= 55296 && num2 < 57344) { throw new JavaScriptException(JavaScriptError.URIDecodeError); } if (num2 >= 65536) { if (num2 > 1114111) { throw new JavaScriptException(JavaScriptError.URIDecodeError); } stringBuilder.Append((char)(((num2 - 65536 >> 10) & 0x3FF) + 55296)); stringBuilder.Append((char)(((num2 - 65536) & 0x3FF) + 56320)); continue; } c2 = (char)num2; } if (InURISet(c2, flags)) { stringBuilder.Append(encodedURI, num, i - num + 1); } else { stringBuilder.Append(c2); } } return(stringBuilder.ToString()); }
private static string Decode(object encodedURI, URISetType flags) { string str = Microsoft.JScript.Convert.ToString(encodedURI); StringBuilder builder = new StringBuilder(); for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch != '%') { builder.Append(ch); } else { char ch2; int startIndex = i; if ((i + 2) >= str.Length) { throw new JScriptException(JSError.URIDecodeError); } byte num3 = HexValue(str[i + 1], str[i + 2]); i += 2; if ((num3 & 0x80) == 0) { ch2 = (char) num3; } else { int num4 = 1; while (((num3 << num4) & 0x80) != 0) { num4++; } if (((num4 == 1) || (num4 > 4)) || ((i + ((num4 - 1) * 3)) >= str.Length)) { throw new JScriptException(JSError.URIDecodeError); } int num5 = num3 & (((int) 0xff) >> (num4 + 1)); while (num4 > 1) { if (str[i + 1] != '%') { throw new JScriptException(JSError.URIDecodeError); } num3 = HexValue(str[i + 2], str[i + 3]); i += 3; if ((num3 & 0xc0) != 0x80) { throw new JScriptException(JSError.URIDecodeError); } num5 = (num5 << 6) | (num3 & 0x3f); num4--; } if ((num5 >= 0xd800) && (num5 < 0xe000)) { throw new JScriptException(JSError.URIDecodeError); } if (num5 < 0x10000) { ch2 = (char) num5; } else { if (num5 > 0x10ffff) { throw new JScriptException(JSError.URIDecodeError); } builder.Append((char) ((((num5 - 0x10000) >> 10) & 0x3ff) + 0xd800)); builder.Append((char) (((num5 - 0x10000) & 0x3ff) + 0xdc00)); goto Label_01D4; } } if (InURISet(ch2, flags)) { builder.Append(str, startIndex, (i - startIndex) + 1); } else { builder.Append(ch2); } Label_01D4:; } } return builder.ToString(); }
private static string Encode(object uri, URISetType flags) { string str = Microsoft.JScript.Convert.ToString(uri); StringBuilder bs = new StringBuilder(); for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (InURISet(ch, flags)) { bs.Append(ch); } else { int num2 = ch; if ((num2 >= 0) && (num2 <= 0x7f)) { AppendInHex(bs, num2); } else if ((num2 >= 0x80) && (num2 <= 0x7ff)) { AppendInHex(bs, (num2 >> 6) | 0xc0); AppendInHex(bs, (num2 & 0x3f) | 0x80); } else if ((num2 < 0xd800) || (num2 > 0xdfff)) { AppendInHex(bs, (num2 >> 12) | 0xe0); AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80); AppendInHex(bs, (num2 & 0x3f) | 0x80); } else { if ((num2 >= 0xdc00) && (num2 <= 0xdfff)) { throw new JScriptException(JSError.URIEncodeError); } if (++i >= str.Length) { throw new JScriptException(JSError.URIEncodeError); } int num3 = str[i]; if ((num3 < 0xdc00) || (num3 > 0xdfff)) { throw new JScriptException(JSError.URIEncodeError); } num2 = (((num2 - 0xd800) << 10) + num3) + 0x2400; AppendInHex(bs, (num2 >> 0x12) | 240); AppendInHex(bs, ((num2 >> 12) & 0x3f) | 0x80); AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80); AppendInHex(bs, (num2 & 0x3f) | 0x80); } } } return bs.ToString(); }