hack のためのネタ帳, etc,,,

いわゆる俗に言うURLエンコード
RFC 3986 では「:/?#[]@!$&'()*+,;=」をデリミタとして使う場合を除いて [-._~0-9a-zA-Z] 以外の全ての文字を % 表記にする模様。

参考になるページ等

エンコーディング用コマンドラインワンライナー

AWK

LANG=C awk 'BEGIN{s=ARGV[1];for(i=0;i<256;i++)ord[sprintf("%c",i)]=i;for(i=1;i<=length(s);i++){c=substr(s,i,1);if(match(c,/[-._~0-9a-zA-Z]/))printf("%s",c);else printf("%%%02X",ord[c])}exit}'
標準機能で文字コード→文字は出来るけど、文字→文字コードが出来ないので結構無理やり。LANG=C 入れとかないとマルチバイトが1文字扱いになるかも。
参考:

Ruby1.9以降

ruby -e 'print "#{ARGV[0]}".force_encoding("BINARY").each_char.map{|c|/[-._~0-9a-zA-Z]/=~c ?c:"%%%02X"%[c.ord]}.join'
CGI.escape は ~ が %7E、スペースが + になる。
URI.encode_www_form_component は ~ が %7E、スペースが + になるのに加えて * が変換されずに残る。
URI.escape は「:/?[]@!$&'()*+,;=」(「#」以外のデリミタ)が変換されずに残る。
それが問題にならないなら以下のようにも書ける。
ruby -rcgi -e 'print CGI.escape(ARGV[0])'
ruby -ruri -e 'print URI.encode_www_form_component(ARGV[0])'
ruby -ruri -e 'print URI.escape(ARGV[0])'

Perl

perl -MURI::Escape -e 'print uri_escape($ARGV[0])'
参考:

JavaScript

encodeURIComponent(...)

関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます