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