OpenSearchDescritionの続き(最後)
http://d.hatena.ne.jp/kazuokohchi/20070309#1173435564 のさらに続き。検索エンジンにnamazuを使っているとIEではどうしても文字化けしていた。結局以下のようにする。
- opensearchdescritionのxmlで、以下のように指定。
<Language>ja-JP</Language> <OutputEncoding>EUC-JP</OutputEncoding> <InputEncoding>UTF-8</InputEncoding> <Url type="text/html" template="http://www.example.jp/cgi-bin/foo/enamazu.cgi?key={searchTerms}&whence=0" />
- 上記で指定したnamazuラッパーを用意。(perl 5.8以降)。このアイデアは、http://phinloda.jugem.cc/?eid=84#sequel によるもの。
#!/usr/bin/perl -w # # enamazu.cgi for UTF-8 input # # see http://phinloda.jugem.cc/?eid=84#sequel # # For open search description and use CGI.pm use strict; use CGI; #use CGI qw/-debug/; use Encode; my $q = new CGI; my $result = ""; foreach my $name ($q->param) { my $value = $q->param($name); # especially for namazu key if ($name eq "key") { my $octets = decode("utf8", $value); $value = encode("euc_jp", $octets); # URL encode $value =~ s/(\W)/'%'.unpack("H2", $1)/ego; $value =~ tr/ /+/; } $result .= "&" if $result; $result .= "$name=$value"; } my $forward = "http://www.mmy.ne.jp/cgi-bin/mmy/namazu/namazu.cgi?" . $result; print <<EOF; Location: $forward EOF 1;