- ベストアンサー
検索窓の設置について
自身のHP上に検索窓を設置していますが キーワードの入力域は一つでボタンによってサーチエンジンを変えています。 HPの文字コードはEUC-JPで作成しているのですが サーチエンジンの中にEUC-JPに対応していないものがあり、入力したキーワードを認識してくれません。 構造としては htmlで<form action=******.cgi method="GET">として ******.cgiでボタンによってサーチエンジンを振り分けています。 jocde.plでのコンバートも上手くいってないようなので 他に方法があれば教えて下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> $code = &jcode'convert($data,'sjis'); > > $dataにはeucでセットされているのですが > $codeには何もセットされていません。 jcodeの使用方法は、以下のようになっています。 &jcode'convert(*line, $ocode [, $icode [, $option]]) 返ってくる値は、 return (undef, undef) unless $icode = $icode || &getcode(*s); もしくは return (undef, $icode) if $icode eq 'binary'; もしくは wantarray ? (*f, $icode) : $icode; となっているので、本来ならば、$icode($code)が返ってくるのですが、 返ってこないと言うことは、getcodeがうまくいっていないのでしょう。 明示的に、$dataの文字コードがeucと分かっていれば、 my @tmp = &jcode'convert($data,'sjis'); や my @tmp = &jcode'convert($data,'sjis', 'euc'); としてみて、@tmpの中身を覗いてみてはいかがでしょうか。
その他の回答 (1)
- agharta
- ベストアンサー率52% (54/103)
***.cgiでどのように変換を行っているのでしょうか。 また、jcode.plまたはJcode.pmがよろしいかと。(jocde.plはtypo?!) 使用しているPerlのバージョンによっても変わると思います。 サーチエンジンには、どのようにキーワードを渡しているのでしょうか。 もう少し内容を書いた方がわかると思います。
補足
説明不足ですみませんでした。 教えて頂いたようにjcode.plを使ってみましたが 上手く変換できません。 <html側> <form action="******.cgi" method="GET"> <******.cgi側> #! /usr/bin/perl require 'jcode.pl'; $buffer = $ENV{'QUERY_STRING'}; @buffer = split(/&/, $buffer); foreach (@buffer) { # @buffer配列を1つづつ参照 ($n, $v) = split(/=/, $_); $in{$n} = $v; } $data = $in{'word'}; $code = &jcode'convert($data,'sjis'); $dataにはeucでセットされているのですが $codeには何もセットされていません。 jcode.plは******.cgiと同じディレクトリに存在しています。