【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

utf-8でフォーム処理のコードを書いてます。
euc-jpで動作していた全角文字の正規表現がutf-8で動作しません。
単純な「$str =~ /あ/」のような書き方ではなく、別な指定方法が必要なのでしょうか?

・perl5.8 文字コードutf-8 標準入力側文字コードutf-8

use utf8;
my(%POST,$buffer,$key,$value,@data_s);
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
if ($ENV{'CONTENT_TYPE'} =~ /application\/x-www-form-urlencoded/i) {
binmode STDIN;
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@data_s = split(/&/,$buffer);
foreach $buffer (@data_s) {
($key,$value) = split(/=/,$buffer);
$value =~ tr/+/ /;
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/eg;
if ( exists ($POST{$key}) ) { $POST{$key} .= '<>' . $value; }
else { $POST{$key} = $value; }
}
}
}

binmode STDOUT,":encoding(utf8)";
print "Content-type: text/html; charset=utf-8\n\n";
print "<br>\n";
foreach $key (keys %POST) {
if ($POST{$key} =~ /[0-9]/) { print "全角数字にマッチ<br>\n"; }######
print "$key = $POST{$key}<br>\n";
}

exit;

A 回答 (1件)

フォームから受け取った文字列が utf8 のバイト列だとすると Perl が内部で扱えるようにするためにデコードする必要があります。



ということでプログラムの最初の方で
use Encode;
をやっておいて、$value を $POST{$key} に代入する前に
$value2 = decode('utf8', $value);
のようにしましょう(で、$POST{$key} = $value2; のように代入する)。
    • good
    • 0
この回答へのお礼

___noboru___様、簡潔&的確なご返答ありがとうございます。
教えていただいた通りに処理してみたところ、解決しました!

感謝いたします。

お礼日時:2006/01/11 17:43

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