2011/05/10

c++でcgi ー URLエンコード

RFC 3986にしたがってURLエンコードをするプログラムです。

数字/アルファベット/[-](ハイフン)/[.](ピリオド)/[_](アンダーバー)/[~](チルダ)以外の文字を
『%○○(○は16進数)』に変換します。
(PHP5.3移行のrawurlencodeと同じ動作になるはずです。)




※ 半角スペースを[+]、[~]を[%7E]に変換する仕様は、application/x-www-form-urlencodedによるエンコード方法(PHPのurlencode関数)です。


  1. #include <string>  
  2.   
  3. std::string UrlEncode( const std::string & str )  
  4. {  
  5.  std::string retStr;  
  6.   
  7.  std::string::size_type length = str.size();   
  8.  for ( std::string::size_type i = 0 ; i < length ; i++ )  
  9.  {  
  10.   if (( '0' <= str[ i ] && str[ i ] <= '9' ) ||  
  11.    ( 'a' <= str[ i ] && str[ i ] <= 'z' ) ||  
  12.    ( 'A' <= str[ i ] && str[ i ] <= 'Z' ) ||  
  13.    str[ i ] == '-'   || str[ i ] == '.'   ||  
  14.    str[ i ] == '_'   || str[ i ] == '~' )  
  15.   {  
  16.    // 数字/アルファベット/[-][.][_][~]はそのまま  
  17.    retStr += str[ i ];  
  18.   }  
  19.   else  
  20.   {  
  21.    retStr += '%';  
  22.    char tmp[ 3 ];  
  23.    snprintf( tmp, 3, "%X"static_cast< unsigned char >( str[ i ] ));  
  24.    retStr += tmp;  
  25.   }  
  26.  }  
  27.   
  28.  return retStr;  
  29. }  

0 コメント:

コメントを投稿

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates