2011/05/10

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

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

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




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


#include <string>

std::string UrlEncode( const std::string & str )
{
 std::string retStr;

 std::string::size_type length = str.size(); 
 for ( std::string::size_type i = 0 ; i < length ; i++ )
 {
  if (( '0' <= str[ i ] && str[ i ] <= '9' ) ||
   ( 'a' <= str[ i ] && str[ i ] <= 'z' ) ||
   ( 'A' <= str[ i ] && str[ i ] <= 'Z' ) ||
   str[ i ] == '-'   || str[ i ] == '.'   ||
   str[ i ] == '_'   || str[ i ] == '~' )
  {
   // 数字/アルファベット/[-][.][_][~]はそのまま
   retStr += str[ i ];
  }
  else
  {
   retStr += '%';
   char tmp[ 3 ];
   snprintf( tmp, 3, "%X", static_cast< unsigned char >( str[ i ] ));
   retStr += tmp;
  }
 }

 return retStr;
}

0 コメント:

コメントを投稿

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