URLを触る時は、URI(モジュール名)以外も知っておくと吉

| 0 Comments | 0 TrackBacks | このエントリーをはてなブックマークに追加 このエントリーのはてなブックマーク件数

こんばんは!


URLを触る時は、URI(perlモジュール名)が超便利だと思う。


という話を書きましたが、実は他のモジュールをもう少し知っておくと、さらにハッピーになります。


おっと、それを説明する前に

 my $uri = URI->new('http://perl-mongers.org');
 print $uri->as_string . "\n";
 print "$uri\n";

上記の出力はどちらも、「http://perl-mongers.org」となり、同じ結果です。

これを話しておかないと、めんどうに思う方がいたりすると、Dan the Perl Monger さんにコメントで教えてもらいました。


また、タイトルにURIと、あまり深く考えず書いてたのを、C_L さんに指摘してもらいました。


ありがとうございます。 

URI::QueryParamを活用しよう!

query_form() メソッドは便利なのですが、困るときがあります。例をあげてみましょう。

use strict;
use warnings;
use URI;

use Data::Dumper;

my $uri = URI->new('http://perl-mongers.org');

$uri->query_form( { hoge => 'hoge', foo => [ 1 , 2 ] } ) ;

my %params = $uri->query_form;
warn Dumper \%params;

my @params = $uri->query_form;
warn Dumper \@params;

結果

$VAR1 = {
          'foo' => '2',
          'hoge' => 'hoge'
        };
$VAR1 = [
          'foo',
          '1',
          'foo',
          '2',
          'hoge',
          'hoge'
        ];

そうですね。 query_form の戻り値は、配列なので、fooというパラメータを二つ渡した際に、場合によっては扱いにくくなってしまいます。下記のような、形式でデータを手に入れたいケースがありますよね?

$VAR1 = {
          'foo' => [
                     '1',
                     '2'
                   ],
          'hoge' => 'hoge'
        };

そこで、URI::QueryParamですね。このモジュールを use するといくつかのモジュールが使えるようになります。下記のコードを実行すると、上記の欲しい形で結果を手に入れることができます。

use strict;
use warnings;
use URI;
use URI::QueryParam;

use Data::Dumper;

my $uri = URI->new('http://perl-mongers.org');

$uri->query_form( { hoge => 'hoge', foo => [ 1 , 2 ] } ) ;

my $params = $uri->query_form_hash;
warn Dumper $params;

便利ですね!

URI::Escape

私達は、日本人または、日本語を扱う方々のはずなので、URI::Escapeは、必ずお世話になると思います。


具体的に何をするかというと、URLにマルチバイトや記号などのurlに使うことができない文字を、安全な文字に変換してくれます。

my $a = URI::Escape::uri_escape('日本語') ;
my $b = URI::Escape::uri_escape_utf8(  Encode::decode( 'utf-8' , '日本語' ) ) ;
print "$a\n" ;
print "$b\n" ;
print URI::Escape::uri_unescape($a) ."\n";
print URI::Escape::uri_unescape($b) ."\n";

この結果は、以下のようになります。安全ですね!

%E6%97%A5%E6%9C%AC%E8%AA%9E
%E6%97%A5%E6%9C%AC%E8%AA%9E
日本語
日本語

注意として、utf8のフラグが立っている文字列の場合、専用の関数を使う必要があります。


これで、さらにURLを触るのが楽しくなりますね!


:wq!

No TrackBacks

TrackBack URL: http://perl-mongers.org/MT/mt-tb.cgi/59

Leave a comment

About this Entry

This page contains a single entry by ともひろ published on June 20, 2008 11:05 PM.

URLを触る時は、URI(perlモジュール名)が超便利だと思う。 was the previous entry in this blog.

実用! Perlで縦長連続画像を1フレームずつバラして鑑賞 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.21-en