※ ChatGPTを利用し、要約された質問です(原文:utf-8環境で標準入力からの全角文字にマッチさせる方法)
utf-8環境で全角文字にマッチさせる方法
このQ&Aのポイント
utf-8環境で標準入力からの全角文字にマッチさせる方法について調査しています。
utf-8でフォーム処理のコードを書いていますが、euc-jpで動作していた全角文字の正規表現がutf-8環境では動作しません。
単純な「$str =~ /あ/」のような書き方ではなく、別な指定方法が必要なのかを知りたいです。
utf-8環境で標準入力からの全角文字にマッチさせる方法
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;
お礼
___noboru___様、簡潔&的確なご返答ありがとうございます。 教えていただいた通りに処理してみたところ、解決しました! 感謝いたします。