例えばこういう状況があったとする。
#! c:/perl/bin/perl
print "Content-type: text/plain\n\n";
print "hello\n";
print "hello\n";
$rein="教室";
$key="教";
$key="教";
if($rein =~ $key){
print"a\n";
}
print"a\n";
}
これを実行するとaが表示される。
教室が教を含むから。
教室が教を含むから。
ところが教室をパソコン教室、教をパソコンにして同じcgiを実行すると、エラーになる。
これは「ソ」という文字のコードが5Cで終わるため。
5Cは\なので、このせいでバグる。
これは「ソ」という文字のコードが5Cで終わるため。
5Cは\なので、このせいでバグる。
if($rein =~ $key)では「含まれるかどうか」という検索をしているが、
どうも=~を使うときは「パソコン」という文字でなく、文字コードの数字で判断されるらしい。
文字コードになると「ソ」は5Cを含むので検索できない。
どうも=~を使うときは「パソコン」という文字でなく、文字コードの数字で判断されるらしい。
文字コードになると「ソ」は5Cを含むので検索できない。
しかしこれはこの文字コードがShift_JISだから。
これをuft-8やeucなどに変えると5Cでなくなるのでバグらないらしい。
これをuft-8やeucなどに変えると5Cでなくなるのでバグらないらしい。
なのでif($rein =~ $key)をやるときだけレインとキーをutf-8とかにできないかな。
つまりif(encode-utf($rein) =~ encode-utf($key))的なことができればいい。
この式は間違ってると思うが、イメージ的にはそんな感じ。
=~を使うときだけでも一時的に文字コードを変えられないかなぁ……。
つまりif(encode-utf($rein) =~ encode-utf($key))的なことができればいい。
この式は間違ってると思うが、イメージ的にはそんな感じ。
=~を使うときだけでも一時的に文字コードを変えられないかなぁ……。