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;
}

Posted in: 
0 コメント:
コメントを投稿