2013年1月アーカイブ

Scriptletの書き方

 

ブックマークのURL欄にJavaScriptを書く。

下記のように書くとキレーかな(?)

 

javascript:void(func=function(){フツーに処理を書く}, func())

 

例)

javascript:void(func=function(){alert('%EF%BD%91(^%CF%89^)%CF%81 %EF%BE%86%EF%BD%AC%EF%BD%AF%EF%BE%8E%EF%BD%B2');confirm('%EF%BC%BC(^%CF%89^)%E3%83%8E %EF%BE%94%EF%BD%AF%EF%BE%8E%EF%BD%B2');}, func())

UTF-8について

Webサーバのログとか、AJAXの内容とかでは、日本語や記号をUTF-8でエンコードされた形、あるいはUTF-8のコード表記で見ることが多くなってきたわけですが・・・

 

例えば「ポ」という文字は・・・

 

\u30ddという「コード」がマッピングされている。

 

これは、UTF-8における「その文字のコード」であり、UTF-8でエンコードしたものではない。

 

実際にこれらのコードでエンコードするには、他に追加すべき情報がある。

 

このコードを2進数にすると次のようになる。

 3 0 d d => 0011 0000 1101 1101

 

これを次のようにゴニョゴニョする。

=---- : 「1」の個数(=バイト数)+「0」
     ---- : 1バイト目
         =-- : 「10」バイトの区切り
            ------ : 2バイト目
                  =-- : 「10」バイトの区切り
                     ------ : 3バイト目
     ----   ------   ------ : この領域に「30dd」を入れると次のようになる。
=11100011=10000011=10011101 : これを16進にすると次のようになる。
=E3=83=9D : UTF-8エンコード完了

 

nkf(ファイルのエンコードをゴニョゴニョする)コマンドで確認する。

echo "ポ"|nkf -wMQ

=E3=83=9D

 

逆に言うと、nkfでは、実際のどの文字がどのコードにマッピングされているか直接的には分からない。

 

コード<==>文字の変換には、JavaScriptがお手軽でいい。

### コード→文字の変換

 -  サーバでnode.jsとか入っていれば、

    node -e "console.log(unescape('\u30dd'.replace(/\\\\u/g, '%u')))"

 -  あるいは、Google Chrome のデベロッパーツールのコンソールで、

    console.log(unescape('\u30dd'.replace(/\\u/g, '%u')))

### 文字→コードの変換

* replaceの位置が変わっていることに注意 *

 -  サーバでnode.jsとか入っていれば、

    node -e "console.log(escape('ポ').replace(/%u/g, '\\\\u'))"

 -  あるいは、Google Chrome のデベロッパーツールのコンソールで、

    console.log(escape('ポ').replace(/%u/g, '\\u'))

 

JavaScriptでエンコードするには、encodeURI, encodeURIComponentを使う。

 

ハ長調だと「ラ」の音は、「A」っていうコードだけど、実際は「440Hz」みたいな(?)

指定文字でパディングするJavaScript

 

// 左側を指定文字でパディング

var strpad = function(str, len, pad, right){

    if(typeof pad == "undefined" || pad.length == 0){ pad = " "; }

    var padding = "";

    if(len){

        for(var i = 0; i < len; i++){ padding += pad; }

    }

    str = new String(str);

    if(len){

        if(right){

            str = str + padding;

            str = str.substr(0, len);

        }else{

            str = padding + str;

            str = str.substr(str.length - len, len);

        }

    }

    if(pad == " ") str = str.replace(/ /g, "&nbsp;");

    return str;

// 右側を指定文字でパディング

var strpadright = function(str, len, pad){return strpad(str, len, pad, true)}

// 左側を"0"パディング

var strzeropad = function(str, len){return strpad(str, len, "0");}

// 右側を"0"パディング

var strpadzero = function(str, len){return strpad(str, len, "0", true);}

 

// 使用例

strpad("aa", 5, "x")

=> "xxxaa"

strpad("aa", 5, "x")

=> "xxxaa"

strpadright("aa", 5, "x")

=> "aaxxx"

strzeropad("aa", 5, "x")

=> "000aa"

strpadzero("aa", 5, "x")

=> "aa000"

// 本体

var d2x=function(d,s){var l=s.length;var x="";while(d>0){x=s.charAt(d%l)+x;d=Math.floor(d/l);}return x;}

var x2d=function(x,s){x=''+x;x=x.trim();var i,j,k=0,l=x.length;for(i=0;i<=l;i++){for(j=0;j<s.length;j++){if(s.charAt(j)==x.charAt(i)){k+=j*Math.pow(s.length,l-i-1);}}}return k;}

 

// 使用例

var seeds = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

d2x(1, seeds);   // => "1"

d2x(9, seeds);   // => "9"

d2x(10, seeds);   // => "a"

d2x(35, seeds);   // => "z"

d2x(36, seeds);   // => "A"

d2x(61, seeds);   // => "Z"

d2x(62, seeds);   // => "10"

 

x2d("1", seeds);   // => 1

x2d("9", seeds);   // => 9

x2d("a", seeds);   // => 10

x2d("z", seeds);   // => 35

x2d("A", seeds);   // => 36

x2d("Z", seeds);   // => 61

x2d("10", seeds);   // => 62

このアーカイブについて

このページには、2013年1月に書かれた記事が新しい順に公開されています。

前のアーカイブは2012年8月です。

次のアーカイブは2013年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。