| 284 | return Result; |
| 285 | } |
| 286 | MediaInfo_Config::urlencode DetectPercentEncode(const string& In, bool AcceptSlash=false) |
| 287 | { |
| 288 | MediaInfo_Config::urlencode Result=MediaInfo_Config::URLEncode_Guess; |
| 289 | for (string::size_type i=0; i<In.size(); i++) |
| 290 | { |
| 291 | char C=In[i]; |
| 292 | switch (C) |
| 293 | { |
| 294 | case '%': |
| 295 | { |
| 296 | if (i+2>In.size()) |
| 297 | return MediaInfo_Config::URLEncode_No; |
| 298 | char C1=In[++i]; |
| 299 | if (!((C1>='0' && C1<='9') |
| 300 | || (C1>='A' && C1<='F') |
| 301 | || (C1>='a' && C1<='f'))) |
| 302 | return MediaInfo_Config::URLEncode_No; |
| 303 | char C2=In[++i]; |
| 304 | if (!((C2>='0' && C2<='9') |
| 305 | || (C2>='A' && C2<='F') |
| 306 | || (C2>='a' && C2<='f'))) |
| 307 | return MediaInfo_Config::URLEncode_No; |
| 308 | Result=MediaInfo_Config::URLEncode_Yes; |
| 309 | continue; |
| 310 | } |
| 311 | case '+': // Often used as space separator |
| 312 | case '\'': |
| 313 | case '!': |
| 314 | case '(': |
| 315 | case ')': |
| 316 | case '*': |
| 317 | continue; |
| 318 | case ';': |
| 319 | case ':': |
| 320 | case '@': |
| 321 | case '&': |
| 322 | case '=': |
| 323 | case '$': |
| 324 | case ',': |
| 325 | case '?': |
| 326 | case '#': |
| 327 | case '[': |
| 328 | case ']': |
| 329 | return MediaInfo_Config::URLEncode_No; |
| 330 | case '/': |
| 331 | if (AcceptSlash) |
| 332 | continue; |
| 333 | return MediaInfo_Config::URLEncode_No; |
| 334 | default: |
| 335 | if (!((C>='0' && C<='9') |
| 336 | || (C>='A' && C<='Z') |
| 337 | || (C>='a' && C<='z') |
| 338 | || C=='-' |
| 339 | || C=='.' |
| 340 | || C=='_' |
| 341 | || C=='~')) |
| 342 | { |
| 343 | if (Result!=MediaInfo_Config::URLEncode_Yes) |
no test coverage detected