memo.xight.org

日々のメモ

UTF-8で書かれたWebページから namazu で検索

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