OSDN Git Service

7b717ae7d8788c72400516138ff7e0a2834ecaab
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / HttpUtility.cs
1 // Copyright (c) 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
2 //\r
3 // Licensed under the Apache License, Version 2.0 (the "License");\r
4 // you may not use this file except in compliance with the License.\r
5 // You may obtain a copy of the License at\r
6 //\r
7 //    http://www.apache.org/licenses/LICENSE-2.0\r
8 //\r
9 // Unless required by applicable law or agreed to in writing, software\r
10 // distributed under the License is distributed on an "AS IS" BASIS,\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 // See the License for the specific language governing permissions and\r
13 // limitations under the License.\r
14 \r
15 using System;\r
16 using System.Collections.Specialized;\r
17 using System.Globalization;\r
18 using System.Text;\r
19 \r
20 namespace KancolleSniffer\r
21 {\r
22     public class HttpUtility\r
23     {\r
24         public static NameValueCollection ParseQueryString(string query)\r
25         {\r
26             var r = new NameValueCollection();\r
27             var seg = UrlDecode(query).Split('&');\r
28             foreach (var st in seg)\r
29             {\r
30                 var pair = st.Split('=');\r
31                 if (pair.Length <= 0)\r
32                     continue;\r
33                 var key = pair[0].Trim('?', ' ');\r
34                 var val = pair[1].Trim();\r
35                 r.Add(key, val);\r
36             }\r
37             return r;\r
38         }\r
39 \r
40         public static string UrlDecode(string s)\r
41         {\r
42             return Uri.UnescapeDataString(s.Replace('+', ' '));\r
43         }\r
44 \r
45         public static string JavascriptStringEncode(string s)\r
46         {\r
47             if (string.IsNullOrEmpty(s))\r
48                 return "";\r
49             var sb = new StringBuilder();\r
50             foreach (var ch in s)\r
51             {\r
52                 switch (ch)\r
53                 {\r
54                     case '\\':\r
55                         sb.Append(@"\\");\r
56                         break;\r
57                     case '"':\r
58                         sb.Append(@"\""");\r
59                         break;\r
60                     case '/':\r
61                         sb.Append(@"\/");\r
62                         break;\r
63                     case '\b':\r
64                         sb.Append(@"\b");\r
65                         break;\r
66                     case '\t':\r
67                         sb.Append(@"\t");\r
68                         break;\r
69                     case '\n':\r
70                         sb.Append(@"\n");\r
71                         break;\r
72                     case '\f':\r
73                         sb.Append(@"\f");\r
74                         break;\r
75                     case '\r':\r
76                         sb.Append(@"\r");\r
77                         break;\r
78                     default:\r
79                         CharEncode(sb, ch);\r
80                         break;\r
81                 }\r
82             }\r
83             return sb.ToString();\r
84         }\r
85 \r
86         private static void CharEncode(StringBuilder sb, char ch)\r
87         {\r
88             if (ch < 0x20 || ch == '<' || ch == '>' || ch == '&')\r
89             {\r
90                 sb.Append(@"\u");\r
91                 sb.Append(((int)ch).ToString("x04", CultureInfo.InvariantCulture));\r
92                 return;\r
93             }\r
94             sb.Append(ch);\r
95         }\r
96     }\r
97 }