- ベストアンサー
jcode.plの使い方
- HTMLのフォームからCGI経由で文字を受け取る際に、jcode.plを使用することで文字化けを回避できますが、正しく使い方を理解していない場合にはうまく動作しないことがあります。
- jcode.plを使うにはview.cgi内で読み込む必要があります。
- 受け取ったデータをjcode.plに渡すためには、split関数を使用して受け取った情報を適切に配列に格納する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
いいえ。 これは文字化けではなく、ブラウザがURIエンコードして送ってきた状態のものです。 このままの状態でjcode.plに通しても、 %83%8B%83i%83e%83B%83N%83X のままです。 なぜなら、jcode.plから見れば、「『%83%8B%83i%83e%83B%83N%83X』という文字列が来た」と解釈するだけだからです。 元の日本語に戻したい場合は、エンコードの反対、つまりデコードすればいいことになります。 デコードには以下の文を使います。 $hoge =~ tr/+/ /; $hoge =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg; そして、QUERY_STRINGの値に対して行う場合の例を以下に示します。 foreach $pair (split(/&/,$ENV{'QUERY_STRING'})){ ($name,$value) = split(/=/,$pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg; $FORM{$name} = $value; } これで連想配列(別名「ハッシュ」)FORMに各項目($name)ごとに対になる値($value)が代入されます。 jcode.plはどこで使うのかというと、デコードした後、その全角文字の文字コードをプログラム内で使う上で統一するために使います。 通常、EUC-JPでブラウザに表示していてフォームで送った場合は、ブラウザもEUC-JPの状態でエンコードしたものを送ってくれます。 しかしながら、条件やブラウザのバグ等によってはそうでない場合(ShiftJISだったり等)もありえます。 こんな時に、jcode.plを使うのです。 ちなみに使う時は、 連想配列に代入する前に、 &jcode::convert(\$value,'euc'); というように挿入して使います。(EUC-JPにしたい場合の例)
お礼
ご回答ありがとうございます。 無事解決することができました。 具体例もしめしていただき大変助かりました。 これでようやく先に進めます。 ありがとうございました。