過去ログ 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の設置を希望されます方々に有意義な愚案になれば と投稿し、過去記事とします。
|
|