Entry: 縮.jpのバグを直した
縮.jpのバグを直した
Initial post:
2009.07.30
|
Last modified:
2009.07.30
先日、縮.jpを国際化ドメイン対応にした際にパス名がぶった切られてたのに気づいたので直した。そして、せっかくなので国際化ドメインへの対応方法について、ちらしの裏的メモ。
Locationヘッダにutf8のバイト列を流し込んでもうまく行かなかったのでpunycodeに変換した。
use Net::IDN::Punycode; my $url = 'http://例示.日本/path/'; my $fixed_url = ''; my ($schema, $domain, $uri) = ($url =~ m!(https?)://([^/]+)(.+)!); foreach my $part (split(/¥./, $domain)) { if ($part =~ /¥P{IsASCII}/) { $fixed_url .= 'xn--'. encode_punycode($part). '.'; } else { $fixed_url .= $part. '.'; } } chop($fixed_url); printf("Location: %s://%s¥n¥n", $schema, $fixed_url. $uri);
cpanでいくつかモジュールが見つかるけど、Net::IDN::Punycodeが正解。IDNA::Punycodeは古いから利用率高いけどバグもの。
上記の結果は
http://xn--fsq192h.xn--wgv71a/path/
ちなみに国際化ドメインと国際化URI(って呼んでいいのか?)への対処方法は全く別で、さらに国際化URIは国際化ファイル名と国際化クエリーに対処しないとならない気がするので、その辺を今度整理してみよう。
Subscribe to my RSS feed