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}&amp;whence=0" />
#!/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;

これで、FirefoxIEの両方から文字化けせずに検索窓からのnamazu検索が可能。