String StringUtil::UrlDecode(CStrRef input, bool decodePlus /* = true */) { int len = input.size(); char *ret; if (decodePlus) { ret = url_decode(input.data(), len); } else { ret = url_raw_decode(input.data(), len); } return String(ret, len, AttachString); }
String StringUtil::DecodeFileUrl(const String& input) { Url url; if (!url_parse(url, input.data(), input.size())) { return null_string; } if (bstrcasecmp(url.scheme.data(), url.scheme.size(), "file", sizeof("file")-1) != 0) { // Not file scheme return null_string; } if (url.host.size() > 0 && bstrcasecmp(url.host.data(), url.host.size(), "localhost", sizeof("localhost")-1) != 0) { // Not localhost or empty host return null_string; } return url_raw_decode(url.path.data(), url.path.size()); }
String StringUtil::UrlDecode(const String& input, bool decodePlus /* = true */) { return decodePlus ? url_decode(input.data(), input.size()) : url_raw_decode(input.data(), input.size()); }