プロが教える店舗&オフィスのセキュリティ対策術

HTMLのShift_JISに合わせて、Jcode.plで日本語コード変換のeucをsjisに変更したのですが、"ー"が$FORM{'key'}に含むとサーバーエラーになります。
どうしたら、sjisで"ー"など一部文字でエラーなく処理できるのでしょうか?
アドバイスお願い致します。

if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$name2 = $name;
$value2 = $value;
$FORM2{$name} = $value;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis'); #←ここを変更

A 回答 (2件)

"ー"はSJISでメタ文字"["を含むためのエラーのようです。


foreach中はむしろeucやutf8のような、問題を起こさない文字コードに変換して処理をさせ、printする直前でsjis等に戻してやるのが良いと思いますが、
それ以前にコードの書き方そのものが旧世紀の負の遺産らしいです。
以下のコードにするだけで片付くかもしれません。

#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;

my $q = CGI->new();
my $name = $q->param('name');
my $value = $q->param('value');
print "$name\n";
print "$value\n";

詳しくは参考URLをご覧下さい。

参考URL:http://blog.livedoor.jp/dankogai/archives/507807 …
    • good
    • 0
この回答へのお礼

ご回答ありがとう御座います。
色々と考えてみましたが、結局はEUC-JPのままで合わせることにしました。

お礼日時:2009/11/07 20:47

No.1さんがおっしゃるように、EUC-JPかUTF-8で処理するのが一番スマートかと思い


ます。

おそらく正規表現のところでエラーが出ているのだと思います。
まず、どこでエラーが出ているのかを以下の文を追加して特定してください。

use CGI::Carp qw(fatalsToBrowser);

そして、エラーの出ている正規表現で、quotemataをするか、/\Q~\E/でメタ文字を
無効化してみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとう御座います。
quotemataはエラーはメタ文字無効化はでませんが、別の課題もありますので、EUC-JPに戻して処理することにしました。

お礼日時:2009/11/07 20:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!