桜も咲いていよいよ春ですね。
本年度は語学の習得(英語、中国語、エスペラント)と漢字検定1級取得を目指すつもりです。
あとは人にやさしく、慈善活動にも力を入れて相手の立場にたった活動に心血を注ぐのも目標です。
ところで、iPhoneをつかって横になりながらWebを見たりすると画面が勝手に回転して鬱陶しいという声があることを知りました。
解決策をユーザーの立場にたって真剣に考えた結果、最初から画面を回転しておけば問題が解決するという事に気づきました。
というわけで、早速回転しておきました。
この調子でがんばりたいと思います。よろしくお願いします。
(4月2日追記)
こんな風になってました。
90度回転したままスクロールやコメントの入力も可能でした。
なんだかんだで5年もエイプリルフールネタやってしまいました。
過去のは[長年日記]をクリックすると見れます。
以前の日記でデコードするコードを載せましたが、その続きです。
エンコードの方は適当に思いつきでは無理そうだったのでRFCを読んでみました。
参照元はRFC 3986になります。
Percent-Encodingのデコード関数とエンコード関数を作ってあります。
とはいえ、ナナメ読みなのであんまり信頼してもらっては困りますが。
読んで気づいたのですが、"+"の処理はPercent-Encodingの範疇ではないっぽいですね。
ただしapplication/x-www-form-urlencodedではまずスペースを"+"に置き換えます。
というわけでソースから一応外しました。
上記の用にフォームで使う用途によっては残しておいたほうが便利なのでコメントにしただけにしてます。
長くなったのでファイルでも置いてきます。
2010/11/11追記
このソースコードのライセンスは「ご自由にお使いください」ライセンスです。
用途を問わず、利用改変自由です。ただし無保証。
よろしければ一言コメント欄にどうぞ。(任意です)
1 :///////////////////////////// 2 :/// 3 :/// Percent-Encoding(RFC 3986) 4 :/// 5 :/// 2010.03.08 http://Knonline.NET 6 :/// 7 : 8 : 9 :#include "percentEncoding.h" 10 : 11 ://///////////Percent-Encoding///////////////////////// 12 : 13 :#define ASCII_ALPHA1_START (0x41) //A 14 :#define ASCII_ALPHA1_END (0x5A) //Z 15 :#define ASCII_ALPHA2_START (0x61) //a 16 :#define ASCII_ALPHA2_END (0x7A) //z 17 :#define ASCII_DIGIT_START (0x30) //0 18 :#define ASCII_DIGIT_END (0x39) //9 19 :#define ASCII_HYPHEN (0x2D) //- 20 :#define ASCII_PERIOD (0x2E) //. 21 :#define ASCII_UNDERSCORE (0x5F) //_ 22 :#define ASCII_TILDA (0x7E) //~ 23 : 24 : 25 : 26 : 27 ://16進数文字[A-F|a-f]から数値を得る 28 :int valueFromHexChar(char hex) 29 :{ 30 : if('0' <= hex && hex <= '9') return hex - '0'; 31 : else if('A' <= hex && hex <= 'F') return hex - 'A' +10; 32 : else if('a' <= hex && hex <= 'f') return hex - 'a' +10; 33 : else return 0; 34 :} 35 : 36 ://数値[0-15]から16進数文字を得る 37 :char hexCharFromValue(unsigned int value) 38 :{ 39 : if( value <0 || 16 <= value) return '0'; 40 : return "0123456789ABCDEF"[value]; 41 :} 42 : 43 ://URLエンコードをデコードする 44 :void urlDecode(char* decoded 45 : ,size_t decoded_length 46 : ,const char* source) 47 :{ 48 : decoded_length--; //最後の\0の分 49 : while(*source && decoded_length){ 50 : if(*source == '%'){ 51 : if(*(source+1) == '\0') break; //%の後2Byte続かずに 終わっている場合に備えて 52 : *(decoded++) 53 : = (valueFromHexChar( *(source+1) ) <<4 ) 54 : + valueFromHexChar( *(source+2) ); 55 : source += 3; 56 : }/*else if(*source == '+'){ //おまけ 57 : *(decoded++) = ' '; 58 : source++; 59 : }*/else{ 60 : *(decoded++) = *(source++); 61 : } 62 : decoded_length--; 63 : } 64 : *decoded = '\0'; 65 :} 66 : 67 ://URLエンコードにエンコードする 68 :void urlEncode(char* encoded 69 : ,size_t encoded_length 70 : ,const char* source) 71 :{ 72 : char temp; 73 : encoded_length--; 74 : while(*source && encoded_length){ 75 : temp =*source; 76 : if( ASCII_ALPHA1_START <= temp && temp<= ASCII_ALPHA1_END 77 : ||ASCII_ALPHA2_START <= temp && temp<= ASCII_ALPHA2_END 78 : ||ASCII_DIGIT_START <= temp && temp<= ASCII_DIGIT_END 79 : || temp == ASCII_HYPHEN 80 : || temp == ASCII_PERIOD 81 : || temp == ASCII_UNDERSCORE 82 : || temp == ASCII_TILDA) 83 : { 84 : //Unreserved Characters 85 : *(encoded++) = temp; 86 : 87 : }else{ 88 : //Reserved Characters 89 : *(encoded++) = '%'; 90 : if(!(--encoded_length)) break; 91 : *(encoded++) = hexCharFromValue((unsigned char)temp >> 4); 92 : if(!(--encoded_length)) break; 93 : *(encoded++) = hexCharFromValue(temp & 0x0F); 94 : encoded_length-=2; 95 : } 96 : source++; 97 : encoded_length--; 98 : } 99 : *encoded = '\0'; 100 :} 101 : 102 :
§ K@i [ユーザーフレンドリーな貴方に花を 私に唄を。]
§ Suika [>K@iさん 返答に困りますが、ありがとうございます。]