コトバノウタカタ

よしなしごとをつらつらとつづるばしょ。

perlのURLエンコード

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;

で、UTF-8への文字コード変換は。

$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:すみません、どこで見つけたか忘れました・・・。