andrew4582

WebStringExtentions

May 25th, 2012
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.53 KB | None | 0 0
  1. public static class WebStringExtentions {
  2.  
  3.         public static void WriteStringUtf8(this Stream target,string value) {
  4.             var encoded = Encoding.UTF8.GetBytes(value);
  5.             target.Write(encoded,0,encoded.Length);
  6.         }
  7.  
  8.         public static IDictionary<string,string> ParseQueryString(this string query) {
  9.             // [DC]: This method does not URL decode, and cannot handle decoded input
  10.             if(query.StartsWith("?"))
  11.                 query = query.Substring(1);
  12.  
  13.             if(query.Equals(string.Empty)) {
  14.                 return new Dictionary<string,string>();
  15.             }
  16.  
  17.             var parts = query.Split(new[] { '&' });
  18.  
  19.             return parts.Select(
  20.                 part => part.Split(new[] { '=' })).ToDictionary(
  21.                     pair => pair[0],pair => pair[1]
  22.                 );
  23.         }
  24.         public static string ToQueryString(this NameValueCollection collection) {
  25.             var sb = new StringBuilder();
  26.             if(collection.Count > 0) {
  27.                 sb.Append("?");
  28.             }
  29.  
  30.             var count = 0;
  31.             foreach(var key in collection.AllKeys) {
  32.                 sb.AppendFormat("{0}={1}",key,collection[key].UrlEncode());
  33.                 count++;
  34.  
  35.                 if(count >= collection.Count) {
  36.                     continue;
  37.                 }
  38.                 sb.Append("&");
  39.             }
  40.             return sb.ToString();
  41.         }
  42.         public static string PercentEncode(this string s) {
  43.             var bytes = s.GetBytes();
  44.             var sb = new StringBuilder();
  45.             foreach(var b in bytes) {
  46.                 // [DC]: Support proper encoding of special characters (\n\r\t\b)
  47.                 if((b > 7 && b < 11) || b == 13) {
  48.                     sb.Append(string.Format("%0{0:X}",b));
  49.                 }
  50.                 else {
  51.                     sb.Append(string.Format("%{0:X}",b));
  52.                 }
  53.             }
  54.             return sb.ToString();
  55.         }
  56.         public static byte[] GetBytes(this string input) {
  57.             return Encoding.UTF8.GetBytes(input);
  58.         }
  59.         public static Uri AsUri(this string value) {
  60.             return new Uri(value);
  61.         }
  62.  
  63.         public static string UrlEncode(this string value) {
  64.             // [DC] This is more correct than HttpUtility; it escapes spaces as %20, not +
  65.             return Uri.EscapeDataString(value);
  66.         }
  67.  
  68.         public static string UrlDecode(this string value) {
  69.             return Uri.UnescapeDataString(value);
  70.         }
  71.     }
Advertisement
Add Comment
Please, Sign In to add comment