package org.softeg.slartus.forpdacommon; import android.net.Uri; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Dictionary; import java.util.Hashtable; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by slinkin on 28.01.14. */ public class UrlExtensions { public static Dictionary<CharSequence, CharSequence> get4pdaUrlParams(CharSequence url, CharSequence[] constParams, CharSequence[] patterns) { if (!Pattern.compile("4pda.ru", Pattern.CASE_INSENSITIVE) .matcher(url).find()) return null; Dictionary<CharSequence, CharSequence> res = new Hashtable<>(); for (CharSequence pattern : patterns) { Matcher m = Pattern.compile(pattern.toString(), Pattern.CASE_INSENSITIVE) .matcher(url); if (!m.find())// если хоть один паттерн не найден, возвращаем нулл return null; if (m.groupCount() == 2) res.put(m.group(1), m.group(2)); } return res; } public static Uri getUri(CharSequence uriString) { return Uri.parse((String) uriString); } public static CharSequence decodeUrl(CharSequence url) throws UnsupportedEncodingException { if (isUrlUtf8Encoded(url)) return URLDecoder.decode(url.toString(), "UTF-8"); if (isUrlWindows1251Encoded(url)) return URLDecoder.decode(url.toString(), "windows-1251"); return url; } public static boolean isUrlUtf8Encoded(CharSequence url) throws UnsupportedEncodingException { return isUrlEncoded(url, "UTF-8"); } public static boolean isUrlWindows1251Encoded(CharSequence url) throws UnsupportedEncodingException { return isUrlEncoded(url, "windows-1251"); } public static boolean isUrlEncoded(CharSequence url, String encoding) throws UnsupportedEncodingException { Matcher paramsMatcher = Pattern.compile("(?:\\w+=|/+|\\\\+)([\\w%+_*\\.-]*)", Pattern.MULTILINE).matcher(url); while (paramsMatcher.find()) { if (!isAlphaNumeric(URLDecoder.decode(paramsMatcher.group(1), encoding))) return false; } return true; } private static boolean isAlphaNumeric(String decode) { String symbls = "!@#$%^&*()_+=-`\"{}[]:;'<>,.?/\\| "; for (char c : decode.toCharArray()) { if (!Character.isLetterOrDigit(c) && !symbls.contains(c + "")) { return false; } } return true; } public static String removeDoubleSplitters(String url) { return url.replaceAll("([^:])//", "$1/"); } }