水珮风裳  
First seperating,Finally meeting.
有一种厌倦叫热情;有一种等待叫积极;有一种发呆叫思索;有一种逃离叫勇气.

 

using System;
using System.Web;
 
/// <summary>
 
/// GetKeyword 的摘要说明。
 
/// </summary>

public class GetKeyword
{
 
public string keywd;
 
byte[] array = new byte[2];
 
public GetKeyword()
 
{
  
//
  
// TODO: 在此处添加构造函数逻辑
  
//
 }

 
//将数组中字符连接起来
 public string joinstr(string[] str)
 
{
  
string returnstr = "";
  
for(int i = 0 ; i < str.Length; i++)
  
{
   
if(str[i] != null)
   
{
    returnstr 
+= str[i];
   }

   
else
   
{
    
break;
   }

  }

  
return returnstr;
 }

 
/// 将字符串string转化为16进制数(由于不知道用什么系统函数好,暂且这么转)
 
/// 一个汉字由两个16进制数组成,如:"阿" = B0A1,调用一次本函数可以将B0转成byte格式,因此left存储B,right存储0
 
/// <returns>byte表示这个</returns>

 public byte strTo16(string left,string right)
 
{
  
byte b = (byte)0;
  
int sum;
  
int intleft;
  
int intright;
  
//左边的字符B
  switch(left)
  
{              
   
case "A":
    intleft 
= 10*16;
    
break;
   
case "B":
    intleft 
= 11*16;
    
break;
   
case "C":
    intleft 
= 12*16;
    
break;
   
case "D":
    intleft 
= 13*16;
    
break;
   
case "E":
    intleft 
= 14*16;
    
break;
   
case "F":
    intleft 
= 15*16;
    
break;
   
default:
    intleft 
= int.Parse(left)*16;
    
break;
  }

  
//右边的字符0
  switch(right)
  
{              
   
case "A":
    intright 
= 10;
    
break;
   
case "B":
    intright 
= 11;
    
break;
   
case "C":
    intright 
= 12;
    
break;
   
case "D":
    intright 
= 13;
    
break;
   
case "E":
    intright 
= 14;
    
break;
   
case "F":
    intright 
= 15;
    
break;
   
default:
    intright 
= int.Parse(right);
    
break;
  }

  
//每一个byte是左右字符的总和
  sum = intleft + intright;
  b 
= (byte)sum;
  
return b;
 }


 
//将utf8编码的url解析成关键字数组
 public string[] ANSIKey(string url,string finwd)
 
{
  
string[] key = new string[10];
  
//wd开头为关键字
  int index_Begin = url.IndexOf(finwd);
  
//"wd="这三位长度
  int length = finwd.Length;
  
int i = 0;
  
if(index_Begin != -1)
  
{
   
//从wd=后面,1位长度,找%是否存在
   int index_percent = url.Substring(index_Begin + length, 1).IndexOf("%");
   
//从wd=后面,所有长度,找&是否存在
   int index_And = url.Substring(index_Begin + length).IndexOf("&");
   
//Loop,循环到找到的index_And=0,即&前没有任何关键字
   while(index_And != 0)
   
{
    
//紧跟着%
    if(index_percent == 0)
    
{
     
string left1 = url.Substring(index_Begin + length + 1).Substring(01);
     
string right1 = url.Substring(index_Begin + length + 2).Substring(01);
     
string left2 = url.Substring(index_Begin + length + 4).Substring(01);
     
string right2 = url.Substring(index_Begin + length + 5).Substring(01);
     array[
0= strTo16(left1,right1);
     array[
1= strTo16(left2,right2);
    
     key[i] 
= System.Text.Encoding.Default.GetString(array);
     
//%B0%A1 6位长度
     length += 6;
    }

     
//中间夹杂着非中文
    else if(index_percent > 0)
    
{
     
int index_end = url.Substring(index_Begin + length).IndexOf("%");
     key[i] 
= url.Substring(index_Begin + length).Substring(0,index_end);
     
//这个%与下一个%之间的长度
     length += index_end;
    }

     
//没有%了
    else
    
{
     key[i] 
= url.Substring(index_Begin + length).Substring(0,index_And);
     
//读到结尾
     length += index_And;
    }

    i
++;
    
//获得1个key之后,从后面位置继续寻找%
    index_percent = url.Substring(index_Begin + length).IndexOf("%");
    
//获得1个key之后,从后面位置继续寻找&(结束标记)
    index_And = url.Substring(index_Begin + length).IndexOf("&");
                
//因为163搜索比较特殊,他的关键词串没有&结束符,所以只能程序判断%读完后手动结束
    if(url.IndexOf("163"!= -1)
    
{
     
if(index_percent == -1)
     
{
      index_And 
= 0;
     }

    }

   }

  }

 
  
return key;
 }

  
 
//关键字系统函数解析
 public string key(string url)
 
{
  
string[] key = new string[100];
  
string returnkey = "";
  
//google utf8格式
  if(url.IndexOf("google"!= -1)
  
{
   
int index_Begin = url.IndexOf("q=");
   
if(index_Begin != -1)
   
{
    
int index_End = url.Substring(index_Begin).IndexOf("&");
    
if(index_End != -1)
    
{
     returnkey 
= url.Substring(index_Begin+2,index_End-2);
    }

   }

   
//解码
   returnkey = HttpContext.Current.Server.UrlDecode(returnkey);
   
return returnkey;
  }

   
//yahooutf8格式
  else if(url.IndexOf("yahoo"!= -1)
  
{
   
int index_Begin = url.IndexOf("&p=");
   
if(index_Begin != -1)
   
{
    
int index_End = url.Substring(index_Begin).IndexOf("&");
    
if(index_End != -1)
    
{
     returnkey 
= url.Substring(index_Begin+2,index_End-2);
    }

    
//解码
    returnkey = HttpContext.Current.Server.UrlDecode(returnkey);
   }

   
return returnkey;
  }

   
//baidu
  else if(url.IndexOf("baidu"!= -1)
  
{
   key 
= ANSIKey(url,"wd=");
 
   returnkey 
= joinstr(key);
   
return returnkey;
  }

   
//3721
  else if(url.IndexOf("3721"!= -1)
  
{
   key 
= ANSIKey(url,"p=");
   returnkey 
= joinstr(key);
   
return returnkey;
  }

   
//sina
  else if(url.IndexOf("search.iask"!= -1)
  
{
   key 
= ANSIKey(url,"_searchkey=");
   returnkey 
= joinstr(key);
   
return returnkey;
  }

   
//sohu
  else if(url.IndexOf("sogou"!= -1)
  
{
   key 
= ANSIKey(url,"query=");
   returnkey 
= joinstr(key);
   
return returnkey;
  }

   
//163
  else if(url.IndexOf("163"!= -1)
  
{
   key 
= ANSIKey(url,"q=");
   returnkey 
= joinstr(key);
   
return returnkey;
  }

   
//中搜 soso
  else if(url.IndexOf("zhongsou"!= -1||url.IndexOf("soso"!= -1)
  
{
   key 
= ANSIKey(url,"w=");
   returnkey 
= joinstr(key);
   
return returnkey;
  }

   
//TOM
  else if(url.IndexOf("tom"!= -1)
  
{
   key 
= ANSIKey(url,"word=");
   returnkey 
= joinstr(key);
   
return returnkey;
  }

  
else
  
{
   
return returnkey;
  }

 }

}
posted on 2006-11-21 12:36  水冰月  阅读(330)  评论(0编辑  收藏  举报