Summary
あるページからnamazu.cgiに検索文字列を送信する際,遷移元のページがUTF-8の場合,検索が行なえない.
namazu.cgiがEUC-JPでHTMLエンコードされた検索文字列のみ対応しているのに対し,
遷移元ページがUTF-8で記述されている場合,検索文字列もUTF-8でHTMLエンコードされるため.
1. namazu.cgi を namazu2.cgi にリネーム.
2. 文字コード変換フィルタを namazu.cgi として設置
3. namazu.cgi 中で namazu2.cgi へリダイレクト.
Source
#!/usr/bin/perl
use CGI;
use Text::Iconv;
use CGI::Lite;
my $converter = Text::Iconv->new("UTF8", "EUC-JP");
my $cgi = new CGI;
my $new_query = q();
# パラメータが空の場合を考慮
if ($cgi->param('key')){
$new_query = $converter->convert($cgi->param('key'));
}
$uencode = url_encode($new_query);
print "Location: http://example.com/path/to/namazu2.cgi?key="."$uencode\n\n";
補足
<form> タグの accept-charsetでも回避可能.(Firefox1.5で動作を確認.Internet Explorer 6では動作せず.)
<form accept-charset="euc-jp">
</form>
Reference
namazuでUTF8ファイルの検索http://www.ksknet.net/linux/namazuutf8.html
CGI
CGI::Lite
Text::Iconv