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;
}
发表评论
- 浏览: 15500 次

- 详细资料
搜索本博客
最新评论
-
mysql 的 AUTO_INCREMENT ...
hama 写道pi1ot 写道历史表不要用auto incr,把原表id复制过去 ...
-- by ayis -
mysql 的 AUTO_INCREMENT ...
这个概率很低的吧,除非你业务十分不稳定经常在重启中度过...
-- by edwardpro -
mysql 的 AUTO_INCREMENT ...
这问题确实有. 但是为什么你要删数据呢.为什么要赶上刚删数据时重启呢.
-- by mayongzhan -
mysql 的 AUTO_INCREMENT ...
好痛苦!!有几次遇到这个AUTO_INCREMENT在mysql中有的方法。。但 ...
-- by hua839 -
mysql 的 AUTO_INCREMENT ...
我也碰到这问题,弱弱的。 另外,楼上正解。[b][/b]
-- by 54powerman






评论排行榜