2008-03-03

google baidu referer 信息的解码

关键字: google referer, baidu referer, 编码, 解码
java的编码真是麻烦,如果用python就简单了
    public static Map refererInfoGen(String referer){
    	Map retMap = new HashMap();
    	String site = "";
    	String keyword = "";
    	try{
	    	if(!empty(referer)&&referer.indexOf("/")>-1&&referer.indexOf("&")>-1){
		    	referer=referer.replaceAll(("http://"),"");
		    	int index = referer.indexOf("/");
		    	site = referer.substring(0, index);
		    	int index2 = referer.indexOf("?");
		    	String subReferer = referer.substring(index2+1);
		    	String[] paras = subReferer.split("&");
		    	Map paraMap = new HashMap();
		    	for(String para : paras){
		    		String[] temp = para.split("=");
		    		if(temp.length==2){
		    			paraMap.put(temp[0], temp[1]);
		    		}
		    	}
		    	if(site.indexOf("google")>-1){//from google
		    		if(!empty(paraMap.get("q"))){
			    		site = "google";
			    		keyword = decode(paraMap.get("q").toUpperCase().replaceAll("%", "").replaceAll("\\+", encode(" ")),"UTF-8");//google UTF-8
		    		}
		    	}else if(site.indexOf("baidu")>-1){//from baidu
		    		if(!empty(paraMap.get("wd"))){
			    		site = "baidu";
			    		keyword = decode(paraMap.get("wd").replaceAll("%", "").replaceAll("\\+", encode(" ").toUpperCase()),"GBK");//baidu GBK
		    		}
		    	}else{
		    		site = "";
		    	}
	    	}
    	}catch(Exception e){
    		site = "";
        	keyword = "";
        	log.error("referer error======>"+referer==null?"":referer);
    		e.printStackTrace();
    	}
    	retMap.put("site", site);
    	retMap.put("keyword", keyword);
    	return retMap;
    }
    private static String hexString = "0123456789ABCDEF ";

	public static String encode(String str) {
		byte[] bytes = str.getBytes();
		StringBuilder sb = new StringBuilder(bytes.length * 2);
		for (int i = 0; i < bytes.length; i++) {
			sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
			sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0));
		}
		return sb.toString();
	}

	public static String decode(String bytes, String code) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream(
				bytes.length() / 2);
		for (int i = 0; i < bytes.length(); i += 2)
			baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString
					.indexOf(bytes.charAt(i + 1))));
		String s = "";
		try {
			s = new String(baos.toByteArray(), code);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return s;
	}
评论
发表评论

您还没有登录,请登录后发表评论

hama
搜索本博客
最近加入圈子
存档
最新评论