ラウンジ(兼FAQ掲示板)

site_search.cgiでの日本語変換について
過去ログ NO.1136786993
□ NXer [2006年01月09日15時07分]

site_search.cgiを利用されている蔵人さんから、当方の愚案に
対して、検索語によっては意図しない結果になることをご指摘
いただきました。
これについて、回答を補充させていただきます。NXerです。

すえぽんさんの原作では、入力文字を自動的に識別する127行の
ような日本語変換を利用しています。
そのために、「者」が検索ボタンを押したあと、「メ」に変わり、
元データはそのままですが、それを参照したコンテンツの抄録中
でも同じように「メ」となります。

スクリプトでは

1 検索語入力でキーボードから「じ」と入力、漢字変換後「自」と表示

2 検索ボタンを押した後は「ゥ」となります

3 抄録中にも、「自分」が「ゥ分」となります。

他にも、狢(むじな)は狎(こう、なレル)に、狎は狆(ちん)に変化
します。

1の段階では、site_searchが、shift-jisの文字コード指定をしている
ことから、shift-jisです。
*valueで得た文字は、127行でeucに変換され、データもeucに変換、一致
する時、表示するため再びshift-jisに戻されて、通常の漢字になります。

■------------------------------原作
127 &jcode'convert(*value,'euc');
180 &jcode'convert(*value,'euc');
-------------------------------------

しかし、者がメとなる理由は、まるで入力をeucの文字列とみなし、それ
をさらにeuc変換するような余分な操作が含まれているような感じがします。
そこで、歌代さんが開発されたjcode.plに入力文字が 'sjis'であることを
明確に知らせてみる次の変更を試してみました。

□-------------------------------変更後
127 &jcode'convert(*value,'euc','sjis');
180 &jcode'convert(*file_val,'euc','sjis');
-------------------------------------------

検索ボタンを押した後も、たとえば、狢は狢でした。検索対象となる
ファイル中の「その島には狆と狢が住んでいました」も正しく漢字が
表示されました。

歌代さんのjcode.plは、入力された文字列の日本語(漢字)コード
を自動的に識別して、第2引数で指定する任意の文字コードに変換す
るものです。

&jcode'convert(*value,'euc'); ではeucに変換しています。

しかし、sjisにもeucにも共通して使われている16進数値は、sjisにも
かかわらず、手っ取り早くeucと判断してさらにeuc変換をするようなと
ころがあるようです。
杜甫々さんは、「漢字コードの誤判断をさける」ために

&jcode'convert(*value,'euc','sjis');

と第3引数に入力漢字(文字)コードを指定できる方法に、漢字コード
変換の項で触れられています(『CGI&Perl、究極のレシピー360』、2003))。
site_searchではこの指定方法をとりいれることが、最も簡単な、
かつ、エレガントな問題解消策であると考えて、補足させていただきます。

なお、蔵人さんへの愚案では、sjisで統一しましたが、過去に
蓄積されているデータがsjisである場合は、「表」など5Cを
含む漢字処理をすれば、運用に問題はないと思います。

このように検索の対象となる元データは、当方の場合、Shift-JISです。
したがって、元データがEUCや半角カタカナを含む場合には期待の結果
を得ることができないこともあることをおことわりします。複数の人々
がデータ蓄積をする場合には、選択する文字コードを指定するなどすれ
ば、問題を未然に防ぐことができるかもしれません。

ガリバーであるサーチ・エンジンgoogleの普及にも関わらず、蔵人さん
のようにsite_searchの設置を希望されます方々に有意義な愚案になれば
と投稿し、過去記事とします。


suepon.com | CGI作成/CGI制作 | JavaScript | ドメイン検索 | バナー自動作成 | Google ダンスツール | 松浦亜弥 | H.P.memo | パソコン | ネイル

Copyright (C) 2002 - 2009 suepon , All rights reserved. Powered by CGI Script Market.