protected internal virtual byte[] UrlEncode(byte[] bytes, int offset, int count) { if (!ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int cSpaces = 0; int cUnsafe = 0; // count them first for (int i = 0; i < count; i++) { char ch = (char)bytes[offset + i]; if (ch == ' ') { cSpaces++; } else if (!HttpEncoderUtility.IsUrlSafeChar(ch)) { cUnsafe++; } } // nothing to expand? if (cSpaces == 0 && cUnsafe == 0) { return(bytes); } // expand not 'safe' characters into %XX, spaces to +s byte[] expandedBytes = new byte[count + cUnsafe * 2]; int pos = 0; for (int i = 0; i < count; i++) { byte b = bytes[offset + i]; char ch = (char)b; if (HttpEncoderUtility.IsUrlSafeChar(ch)) { expandedBytes[pos++] = b; } else if (ch == ' ') { expandedBytes[pos++] = (byte)'+'; } else { expandedBytes[pos++] = (byte)'%'; expandedBytes[pos++] = (byte)HttpEncoderUtility.IntToHex((b >> 4) & 0xf); expandedBytes[pos++] = (byte)HttpEncoderUtility.IntToHex(b & 0x0f); } } return(expandedBytes); }
protected internal virtual byte[] UrlEncode(byte[] bytes, int offset, int count) { if (!ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int num = 0; int num2 = 0; for (int i = 0; i < count; i++) { char ch = (char)bytes[offset + i]; if (ch == ' ') { num++; } else if (!HttpEncoderUtility.IsUrlSafeChar(ch)) { num2++; } } if ((num == 0) && (num2 == 0)) { return(bytes); } byte[] buffer = new byte[count + (num2 * 2)]; int num4 = 0; for (int j = 0; j < count; j++) { byte num6 = bytes[offset + j]; char ch2 = (char)num6; if (HttpEncoderUtility.IsUrlSafeChar(ch2)) { buffer[num4++] = num6; } else if (ch2 == ' ') { buffer[num4++] = 0x2b; } else { buffer[num4++] = 0x25; buffer[num4++] = (byte)HttpEncoderUtility.IntToHex((num6 >> 4) & 15); buffer[num4++] = (byte)HttpEncoderUtility.IntToHex(num6 & 15); } } return(buffer); }
private static byte[] UrlEncodeNonAscii(byte[] bytes, int offset, int count, bool alwaysCreateNewReturnValue) { if (!ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int cNonAscii = 0; // count them first for (int i = 0; i < count; i++) { if (IsNonAsciiByte(bytes[offset + i])) { cNonAscii++; } } // nothing to expand? if (!alwaysCreateNewReturnValue && cNonAscii == 0) { return(bytes); } // expand not 'safe' characters into %XX, spaces to +s byte[] expandedBytes = new byte[count + cNonAscii * 2]; int pos = 0; for (int i = 0; i < count; i++) { byte b = bytes[offset + i]; if (IsNonAsciiByte(b)) { expandedBytes[pos++] = (byte)'%'; expandedBytes[pos++] = (byte)HttpEncoderUtility.IntToHex((b >> 4) & 0xf); expandedBytes[pos++] = (byte)HttpEncoderUtility.IntToHex(b & 0x0f); } else { expandedBytes[pos++] = b; } } return(expandedBytes); }
internal static string?UrlEncodeUnicode(string?value) { if (value == null) { return(null); } int l = value.Length; StringBuilder sb = new StringBuilder(l); for (int i = 0; i < l; i++) { char ch = value[i]; if ((ch & 0xff80) == 0) { // 7 bit? if (HttpEncoderUtility.IsUrlSafeChar(ch)) { sb.Append(ch); } else if (ch == ' ') { sb.Append('+'); } else { sb.Append('%'); sb.Append(HttpEncoderUtility.IntToHex((ch >> 4) & 0xf)); sb.Append(HttpEncoderUtility.IntToHex((ch) & 0xf)); } } else { // arbitrary Unicode? sb.Append("%u"); sb.Append(HttpEncoderUtility.IntToHex((ch >> 12) & 0xf)); sb.Append(HttpEncoderUtility.IntToHex((ch >> 8) & 0xf)); sb.Append(HttpEncoderUtility.IntToHex((ch >> 4) & 0xf)); sb.Append(HttpEncoderUtility.IntToHex((ch) & 0xf)); } } return(sb.ToString()); }
internal string UrlEncodeUnicode(string value, bool ignoreAscii) { if (value == null) { return(null); } int length = value.Length; StringBuilder builder = new StringBuilder(length); for (int i = 0; i < length; i++) { char ch = value[i]; if ((ch & 0xff80) == 0) { if (ignoreAscii || HttpEncoderUtility.IsUrlSafeChar(ch)) { builder.Append(ch); } else if (ch == ' ') { builder.Append('+'); } else { builder.Append('%'); builder.Append(HttpEncoderUtility.IntToHex((ch >> 4) & '\x000f')); builder.Append(HttpEncoderUtility.IntToHex(ch & '\x000f')); } } else { builder.Append("%u"); builder.Append(HttpEncoderUtility.IntToHex((ch >> 12) & '\x000f')); builder.Append(HttpEncoderUtility.IntToHex((ch >> 8) & '\x000f')); builder.Append(HttpEncoderUtility.IntToHex((ch >> 4) & '\x000f')); builder.Append(HttpEncoderUtility.IntToHex(ch & '\x000f')); } } return(builder.ToString()); }
internal byte[] UrlEncodeNonAscii(byte[] bytes, int offset, int count, bool alwaysCreateNewReturnValue) { if (!ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int num = 0; for (int i = 0; i < count; i++) { if (IsNonAsciiByte(bytes[offset + i])) { num++; } } if (!alwaysCreateNewReturnValue && (num == 0)) { return(bytes); } byte[] buffer = new byte[count + (num * 2)]; int num3 = 0; for (int j = 0; j < count; j++) { byte b = bytes[offset + j]; if (IsNonAsciiByte(b)) { buffer[num3++] = 0x25; buffer[num3++] = (byte)HttpEncoderUtility.IntToHex((b >> 4) & 15); buffer[num3++] = (byte)HttpEncoderUtility.IntToHex(b & 15); } else { buffer[num3++] = b; } } return(buffer); }
private static byte[] UrlEncode(byte[] bytes, int offset, int count) { if (!ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int cSpaces = 0; int cUnsafe = 0; // count them first for (int i = 0; i < count; i++) { char ch = (char)bytes[offset + i]; if (ch == ' ') { cSpaces++; } else if (!HttpEncoderUtility.IsUrlSafeChar(ch)) { cUnsafe++; } } // nothing to expand? if (cSpaces == 0 && cUnsafe == 0) { // DevDiv 912606: respect "offset" and "count" if (0 == offset && bytes.Length == count) { return(bytes); } else { var subarray = new byte[count]; Buffer.BlockCopy(bytes, offset, subarray, 0, count); return(subarray); } } // expand not 'safe' characters into %XX, spaces to +s byte[] expandedBytes = new byte[count + cUnsafe * 2]; int pos = 0; for (int i = 0; i < count; i++) { byte b = bytes[offset + i]; char ch = (char)b; if (HttpEncoderUtility.IsUrlSafeChar(ch)) { expandedBytes[pos++] = b; } else if (ch == ' ') { expandedBytes[pos++] = (byte)'+'; } else { expandedBytes[pos++] = (byte)'%'; expandedBytes[pos++] = (byte)HttpEncoderUtility.IntToHex((b >> 4) & 0xf); expandedBytes[pos++] = (byte)HttpEncoderUtility.IntToHex(b & 0x0f); } } return(expandedBytes); }