• ベストアンサー

UTF-8のPerlから、UTF-8、EUC、Shift-jisの3つのエンコードテキストを生成

UTF-8で作ったPerl内で、UTF-8にエンコードしたい部分とは別に、 EUCやShift-jisにエンコードして、 UTF-8以外の仕様になっている検索エンジンなどの検索結果に、 テキストリンクを飛ばしたいのですが、行き詰まりました。 いい方法はありますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

use utf8; use Encode; use URI::Escape; my $utf8String = 'テスト'; my $urf8BytesEsc = uri_escape(encode('utf8', $utf8String)); my $eucBytesEsc = uri_escape(encode('euc-jp', $utf8String)); my $sjisBytesEsc = uri_escape(encode('shiftjis', $utf8String)); print 'http://www.google.co.jp/search?hl=ja&q=' . $urf8BytesEsc ,"\n"; print 'http://dictionary.goo.ne.jp/search.php?MT=' . $eucBytesEsc , "\n"; print 'http://example.com/search.cgi?sjis=' . $sjisBytesEsc , "\n";

kuzumiHK
質問者

お礼

ご回答ありがとうございます。 こちらのデータで確認できました。 このところほとんどの検索サービスでUTF-8への対応が進んできているため、 用途は減ってきていますが、これでいろいろと試すことができます。 ありがとうございました。 #!/usr/bin/perl print "Content-type: text/html\n\n"; use utf8; use Encode; use URI::Escape; my $utf8String = 'テスト'; my $utf8BytesEsc = uri_escape(encode('utf8', $utf8String)); my $eucBytesEsc = uri_escape(encode('euc-jp', $utf8String)); my $sjisBytesEsc = uri_escape(encode('shiftjis', $utf8String)); print <<"EOM"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>エンコードテスト</title> </head> <body> <ul> <li><a href="http://www.google.co.jp/search?hl=ja&q=$utf8BytesEsc">UTF8</a></li> <li><a href="http://dictionary.goo.ne.jp/search.php?MT=$eucBytesEsc">EUC</a></li> <li><a href="http://www.google.co.jp/search?hl=ja&q=$sjisBytesEsc">Shift-JIS</a></li> </ul> </body> </html> EOM

その他の回答 (2)

回答No.2

URLエンコードする前に文字コード変換をするだけだと思いますので、 Perl4とかPerl5.6ならJcodeを利用し、 perl5.8以降ならEncodeでもいけると思います。

kuzumiHK
質問者

お礼

ご回答ありがとうございます。 use Encodeでいくつかテストしてみたのですが、 うまくいきませんでした。 もう少しいろいろと調べてみたいと思います。

回答No.1

URL の QUERY_STRING 中のキーワードを URLエスケープする前の文字エンコーディングをUTF-8以外のものでやりたいということでしょうか。 例えば、 http://www.google.co.jp/search?q=%E6%A4%9C%E7%B4%A2 の  %E6%A4%9C%E7%B4%A2 の箇所を UTF-8 以外のエンコーディングの文字列から、URLエスケープしたい ということでしょうか。

kuzumiHK
質問者

お礼

ご確認ありがとうございます。 はい。例えば、 gooや楽天はeucですのでエンコードしたURLで飛ばしたいです。 (すみません、shift-jisは適当なサイトが見つかりませんでした) 具体的には下記のように書いて、 リンク先で文字化けにならなければOKです。 print "gooで「<<a href=\"$goo$entest_euc\">$test</a>」を検索\n"; print "googleで「<<a href=\"$google$entest_utf8\">$test</a>」を検索\n"; ↓↓↓↓↓↓↓↓↓↓↓↓ gooで「<a href="http://dictionary.goo.ne.jp/search.php?MT=%A5%C6%A5%B9%A5%C8">テスト</a>」を検索 googleで「<a href="http://www.google.co.jp/search?hl=ja&q=%E3%83%86%E3%82%B9%E3%83%88">テスト</a>」を検索 難しいでしょうか。

関連するQ&A

専門家に質問してみよう