OSDN Git Service

Model、View、Net、Utilの名前空間にクラスを分類する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Util / HttpUtility.cs
diff --git a/KancolleSniffer/Util/HttpUtility.cs b/KancolleSniffer/Util/HttpUtility.cs
new file mode 100644 (file)
index 0000000..144a392
--- /dev/null
@@ -0,0 +1,97 @@
+// 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