uttsu.com > uttsuの日記 >

2005年8月

2005年 8月
2004年 5月
2003年 11月, 10月, 8月, 5月, 4月, 3月, 2月, 1月
2002年 12月, 11月, 10月, 9月, 8月, 5月, 3月, 2月, 1月
2001年 6月, 5月, 4月, 3月
2005.08.27

2005年8月27日

# Googleからのリファラのデコード

Googleは % 文字を \n にエンコードしているようなので、Perlでデコードするには

sub url_decode {
    local $_ = shift;
    s/\\x/%/g;  # google用
    tr/+/ /;
    s/%([a-f\d])/pack('H2', $1)/gei;
    return $_;
}

とすればいいようだ。

# JavaScript の escape 関数でエンコードされた文字列のデコード

IE等のJavaScriptのescape関数では文字列は UCS-2 という文字コードにエンコードされるようだ(%uXXXX という表記法) 。
Perlでデコードするには、

sub url_decode {
    local $_ = shift;
    if (/%u[a-f\d]{4}/i) {
        s/%([a-f\d]{2})|%u([a-f\d]{4})|(.)/$1 ? "\x00".pack('H2', $1) : $2 ? pack('H4', $2) : "\x00$3"/gei;
    } else {
        tr/+/ /;
        s/%([a-f\d]{2})/pack('H2', $1)/gei;
    }
    return $_;
}

とすれば、EUCやShift JISに加えUCS-2にも対応できる。
ただし、Jcode.pm 0.88 で試したところUCS-2の文字コードを自動認識できないことがあったため、入力がUCS-2だと分かっているときは

Jcode::convert($str, 'euc', 'ucs2');

等と明示的に変換するとうまくいった。

# ブックマーク用CGI

はてなブックマークのようなCGIを作った。
気になったページをいちいちお気に入りに登録していてはお気に入りが肥大化してしまうし、ファイルにURLをメモするのは少し手間だったが、ブックマーク用CGIならbookmarkletで一発なので簡単にクリップできる。


2005年 8月
2004年 5月
2003年 11月, 10月, 8月, 5月, 4月, 3月, 2月, 1月
2002年 12月, 11月, 10月, 9月, 8月, 5月, 3月, 2月, 1月
2001年 6月, 5月, 4月, 3月

Copyright (C) Takashi Utsunomiya. All Rights Reserved.