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 コメント:
コメントを投稿