·¢²©ÎÄ
Thinker

cnhnyu.blog.chinaunix.net

I believe I can soar.   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º1021305
  • ²©ÎÄÊýÁ¿£º483
  • ²©¿Í»ý·Ö£º20087
  • ²©¿ÍµÈ¼¶£ºÉϽ«
  • ×¢²áʱ¼ä£º2006-06-19 15:35:25
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
·ÖÀࣺ C/C++

   ´ò¿ª°Ù¶È£¬ÄãÔÚËÑË÷À¸ÖÐÊäÈë¡°Ü½ÈØÃÃÃá±£¬Äã¿´µ½ÁËʲô£¿ÊDz»ÊÇ¿´µ½ÁËÏÂÃæµÄ¶«¶«£¿
  
    http://www.baidu.com/s?wd=%DC%BD%C8%D8%C3%C3%C3%C3&cl=3

   Ŷ£¬ÄÇôÕâ¸ö"%DC%BD%C8%D8%C3%C3%C3%C3"ÊÇÊ²Ã´ÍæÒâÄØ£¿ ´ÏÃ÷µÄÄã¿ÉÄÜÒѾ­²Âµ½ÁË£¬Ëü¾ÍÊÇ¡°Ü½ÈØÃÃÃá±ÕâËĸö×Ö£¬ÄÇôΪʲôÊÇÕâÑùµÄÄØ£¿
  
   ÍøÒ³ÖÐͨ¹ýurl´«µÝºóµÄ²ÎÊý¾Í»á½«Æä±àÂ룬URL ±àÂëÊÇÒ»ÖÖä¯ÀÀÆ÷ÓÃÀ´´ò°ü±íµ¥ÊäÈëµÄ¸ñʽ. ä¯ÀÀÆ÷´Ó±íµ¥ÖлñÈ¡ËùÓеÄnameºÍÆäÖеÄÖµ£¬½«ËûÃÇ×÷Ϊname/value²ÎÊý±àÂë, ÒÆÈ¥ÄÇЩ²»ÄÜ´«Ë͵Ä×Ö·û, ½«Êý¾ÝÅÅÐеȵȣ¬ÕâЩ»¹È¡¾öÓÚÄãÓÃGET»¹ÊÇPOST?×÷ΪURLµÄÒ»²¿·Ö»òÕß·ÖÀëµØ·¢¸ø·þÎñÆ÷. ²»¹ÜÄÄÖÖÇé¿ö, ÔÚ·þÎñÆ÷¶ËµÄ±íµ¥ÊäÈë¸ñʽÑù×ÓÏóÕâÑù:
    http://www.xxx.com/abc.php?name=zhangsan&gender=male
   ÕâÊÇÒ»¸öרÃŶԵØÖ·À¸ÀïËù´«µÝµÄ²ÎÊý½øÐбàÂëµÄ¹æÔò¡£±ÈÈçÔÚ²ÎÊýÖдøÓпոñµÄ»°£¬´«µÝ²ÎÊýʱ¾Í»á·¢Éú´íÎ󣬶øÓÃURL±àÂë¹ýÒԺ󣬿ոñ±ä³ÉÁË%20ÕâÑù¾Í²»»á·¢Éú´íÎóÁË£»ÁíÍâÖÐÎÄ×Ö¾­±àÂëºóÈ«ÊǹַûºÅ£¬ÓÐÀûÓÚ±£ÃÜ¡£Õâ¸ö±àÂëºóµÄ×Ö´®Ìá½»¸ø·þÎñÆ÷ºóÊDz»ÐèÒª½âÂëµÄ£¬ÍøÒ³»á×Ô¶¯Ê¶±ð¡£

   URL±àÂë×ñÑ­ÏÂÁйæÔò:
   ÿ¶Ôname/valueÓÉ&·û·Ö¿ª.ÿ¶ÔÀ´×Ô±íµ¥µÄname/valueÓÉ=·û·Ö¿ª. Èç¹ûÓû§Ã»ÓÐÊäÈëÖµ¸øÕâ¸öname,ÄÇôÕâ¸öname»¹ÊdzöÏÖ£¬Ö»ÊÇÎÞÖµ(ÏóÕâÑù "name=").ÈκÎÌØÊâµÄ×Ö·û(¾ÍÊÇÄÇЩ²»ÊǼòµ¥µÄÆßλASCII£¬È纺×Ö) ½«ÒÔ°Ù·Ö·û%ÓÃÊ®Áù½øÖƱàÂë. µ±È»Ò²°üÀ¨Ïó =, &, ºÍ % ÕâÐ©ÌØÊâµÄ×Ö·û.ÔÚÊäÈëÇøÖеĿոñ½«ÒÔ¼ÓºÅ+ÏÔʾ.

ÒòΪ±íµ¥ÊäÈëÊÇÓÃÕâ¸öURL±àÂë´«µÝ¸øÄãµÄ½Å±¾µÄ£¬ÔÚÄãÓÃÕâЩ²ÎÊý֮ǰ±ØÐë½âÂ룬ËäÈ»½âÂëÊǸöºÜÆÕ±éµÄ ¹¤×÷£¬µ«ÊÇÄãÔÚÓÃcÓïÑÔ´ÓstdinÖлñÈ¡ÁËÕâЩ²ÎÊýÖ®ºó£¬Èç¹ûÊǺº×ֵϰ£¬Äã±ØÐë×Ô¼º½âÂë¡£ÄÇôÈçºÎ½âÂëÄØ£¿
Çë¿´ÏÂÃæµÄʾÀý³ÌÐò£º

/* decodeurl.c */

#include <stdio.h>
#include <string.h>
#include <ctype.h>


void url2char(unsigned char *surl, unsigned char *res);
int h2i(char *s);

int main()
{
    char str[] = "%DC%BD%C8%D8%C3%C3%C3%C3"; // Õâ¸öÊÇurlÖеĺº×Ö±àÂë½á¹û
    char res[256];

    url2char(str, res); //½âÂë
    printf("%s", res); // ´òÓ¡½âÂëºóµÄºº×Ö
   
    return 0;
}

/*½«16½øÖƱíʾµÄºº×Ö±àÂë½âÂëΪºº×Ö£¬ ¸Ãº¯ÊýÖ»ÊÊÓÃÓÚ´¿ºº×Ö×Ö·û´®*/
void url2char(unsigned char *surl, unsigned char *res)
{
    unsigned char hex[256];
    int i, j, nlen;
    unsigned char tmp[3];

    // Ê×ÏÈÈ¥µôËùÓеİٷֺÅ
    nlen = (int)strlen(surl);
    j = 0;
    for ( i = 0; i < nlen; i++ )
    {
        if ( surl[i] == '%' )
            continue;
        hex[j++] = surl[i];
    }
    hex[j] = 0;

    nlen = (int)strlen(hex);
    j = 0;
   // ½«Ã¿2¸ö16½øÖÆÊýת»»³ÉÒ»¸ö10½øÖÆÊý£¨´òÓ¡³öÀ´¾ÍÊǺº×Ö£©
    for ( i = 0; i < nlen; i += 2)
    {
        tmp[0] = hex[i];
        tmp[1] = hex[i+1];
        tmp[2] = 0;
        res[j++] = h2i(tmp);
    }
    res[j] = 0;
}

int h2i(char *s)
{
  char *digits="0123456789ABCDEF";
  if (islower (s[0])) s[0]=toupper(s[0]);   /* ÅжÏÊÇ·ñÊÇСд×Öĸ£¬ÊÇÔòת»»³É´óд */
  if (islower (s[1])) s[1]=toupper(s[1]);
  return 16*(strchr(digits,s[0])-strchr(digits,'0'))
         + (strchr(digits,s[1])-strchr(digits,'0')); /* ·µ»ØÏàӦʮ½øÖÆÊý */
}
³ÌÐòÔËÐеĽá¹ûÊÇ£º
Ü½ÈØÃÃÃÃ

ÉÏÃæµÄÊÇ´¿ºº×ÖµÄ×Ö·û´®µÄ½âÂ룬Èç¹û×Ö·û´®Öк¬ÓÐÓ¢ÎÄ×Ö·û»òÕ߯äËüµÄ×Ö·ûÄØ£¿
ÔòÓÃÏÂÃæµÄ·½·¨½âÂ룺
void url2char(unsigned char *surl, unsigned char *res)
{
    int i, j, nlen;
    unsigned char tmp[3];

    nlen = (int)strlen(surl);

    j = 0;
    for ( i = 0; i < nlen; )
    {
        if ( surl[i] == '%' )//ÒÔ%¿ªÍ·µÄÊǺº×Ö»òÕ߯äËüÌØÊâ×Ö·û
        {
            tmp[0] = surl[i+1];
            tmp[1] = surl[i+2];
            tmp[2] = 0;
            i += 3;
            res[j] = h2i(tmp);
        }
        else // Ó¢ÎÄ×Ö·û£¬Ö±½Ó¿½±´
        {
            res[j] = surl[i];
            i++;
        }
        j++;
    }
    res[j] = 0;
}

ÔÚÒ»°ãµÄÖÐÎÄÍøÒ³ÖУ¬±ÈÈç°Ù¶È£¬ÓõÄgb2312×Ö·û¼¯£¬°Ù·ÖºÅ¼ÓÉÏ2¸ö16½øÖÆÊý´ú±íÒ»¸öºº×Ö£¬°ÑÁ½¸ö16½øÖÆÊýת»»³É10½øÖÆÊý£¬¶øÒ»¸öAnsi×Ö·û¾ÍÊÇÒ»¸öÎÞ·ûºÅµÄÕûÊý£¬ËùÒÔÕâЩÕûÊýÒÔ×Ö·û´®µÄÐÎʽÁ¬Ðø´òÓ¡³öÀ´¾ÍÊÇÄãÏëÒªµÄºº×Ö¡£

±¾ÎIJο¼ÁËhttp://oss.lzu.edu.cn/blog/article.php?tid_269.htmlÒ»ÎÄ¡£

¸½£ºC/C++ÀïÔõÑùÅжÏ×Ö·û´®Öк¬Óкº×Ö

¸Ã²¿·ÖÀ´Ô´ÓÚhttp://blog.chinaunix.net/u/553/showart_225299.html

¿´×Ö·ûµÄ±àÂë¹æ·¶;GB2312µÄºº×ÖÒÔ´óÓÚ0x80µÄ×Ö½Ú¿ªÊ¼


#include <stdlib.h>
  #include <stdio.h>
  #include <string.h>
   
  int first(unsigned char ch)
  {
      if(ch>=0xb0&&ch<=0xf7)
        return 1;
      else
        return 0;
  }
  int second(unsigned char ch)
  {
          if(ch>=0xa1&&ch<=0xfe)
        return 1;
      else
        return 0;
  }
  int check(const char* p)
  {
      int i=0;
      for(i=0;i<strlen(p)-1;i++)
            if(first(p[i])&&second(p[i+1]))
                return 1;
  return 0;
  }
   
   
  main()
  {
  const char* str= "sdfddfsdf";
  check(str)?puts("there has character!"):puts("there has none character!");
   
  }


ÊÊÓÃÓÚGB2312×Ö·û¼¯,  
  ¿ÉÐÞ¸ÄfirstºÍsecondº¯Êý,ʹÊÊÓÃÓÚÆäËû×Ö·û¼¯:)

Ò»ÖÖ¿ÉÄÜÊÇСÓÚ0xb0¶ø´óÓÚ0x80   ,ÄÇÊÇGB2312ÖÐµÄÆäËû×Ö·û,¶ø·Çºº×Ö.°üÀ¨Î÷ÎÄ...  
  ÁíÒ»ÖÖ¿ÉÄÜÊÇÂÒÂë(¸Ã×Ö·û´®ÒòΪδ֪µÄÔ­Òò¶ªÊ§Á˵ڶþλ,²úÉúÂÒÂë)


Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ