--- /dev/null
+// Copyright (c) 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+// http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+using System;\r
+using System.Collections.Specialized;\r
+using System.Globalization;\r
+using System.Text;\r
+\r
+namespace KancolleSniffer.Util\r
+{\r
+ public class HttpUtility\r
+ {\r
+ public static NameValueCollection ParseQueryString(string query)\r
+ {\r
+ var r = new NameValueCollection();\r
+ var seg = UrlDecode(query).Split('&');\r
+ foreach (var st in seg)\r
+ {\r
+ var pair = st.Split('=');\r
+ if (pair.Length <= 0)\r
+ continue;\r
+ var key = pair[0].Trim('?', ' ');\r
+ var val = pair[1].Trim();\r
+ r.Add(key, val);\r
+ }\r
+ return r;\r
+ }\r
+\r
+ public static string UrlDecode(string s)\r
+ {\r
+ return Uri.UnescapeDataString(s.Replace('+', ' '));\r
+ }\r
+\r
+ public static string JavascriptStringEncode(string s)\r
+ {\r
+ if (string.IsNullOrEmpty(s))\r
+ return "";\r
+ var sb = new StringBuilder();\r
+ foreach (var ch in s)\r
+ {\r
+ switch (ch)\r
+ {\r
+ case '\\':\r
+ sb.Append(@"\\");\r
+ break;\r
+ case '"':\r
+ sb.Append(@"\""");\r
+ break;\r
+ case '/':\r
+ sb.Append(@"\/");\r
+ break;\r
+ case '\b':\r
+ sb.Append(@"\b");\r
+ break;\r
+ case '\t':\r
+ sb.Append(@"\t");\r
+ break;\r
+ case '\n':\r
+ sb.Append(@"\n");\r
+ break;\r
+ case '\f':\r
+ sb.Append(@"\f");\r
+ break;\r
+ case '\r':\r
+ sb.Append(@"\r");\r
+ break;\r
+ default:\r
+ CharEncode(sb, ch);\r
+ break;\r
+ }\r
+ }\r
+ return sb.ToString();\r
+ }\r
+\r
+ private static void CharEncode(StringBuilder sb, char ch)\r
+ {\r
+ if (ch < 0x20 || ch == '<' || ch == '>' || ch == '&')\r
+ {\r
+ sb.Append(@"\u");\r
+ sb.Append(((int)ch).ToString("x04", CultureInfo.InvariantCulture));\r
+ return;\r
+ }\r
+ sb.Append(ch);\r
+ }\r
+ }\r
+}
\ No newline at end of file