URLエンコードなんてperlやってる人にとっては基礎知識中の基礎知識だとは思うが、実際にネットで探してみると、かなかドンピシャのものが見つからなくて困ったので、覚え書きがてら記しておく。
EUCのURLエンコード
私は出力ファイル自体をEUC形式にしていたので、文字コードの変換はなし。URLエンコードは以下。見つけてきたものをコピペしただけなので*1、何をどうやっているのかはよくわからんですが、これでちゃんとできてるぽい。
$text = "はてな"; $text =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $text =~ tr/ /+/;
これで文字列「はてな」は「%a4%cf%a4%c6%a4%ca」に変換されてるはず。後はこれを使ってこんな感じで。
$url = sprintf ("http://d.hatena.ne.jp/search?word=%s", $text);
UTF-8のURLエンコード
はてなブックマーク、はてなマップなどはUTF-8形式の文字コードになっている。検索もこの文字コードにしてやらないとうまくいかない。ということでUTF-8へのエンコード方法。
まず宣言をば。
use Jcode;
$text = "はてな"; Jcode::convert(\$text, 'utf8');
その後に例のURLエンコードの呪文。
$text =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $text =~ tr/ /+/;
これで「はてな」が「%E3%81%AF%E3%81%A6%E3%81%AA」となってるはず。
*1:すみません、どこで見つけたか忘れました・・・。