CGI(perl)での日本語処理の意味を教えてください

[上に] [前に] [次に]
ピーコ 1999/04/27(火) 11:54:50
こんにちは。もう一つ質問があります。
フォームから受け取ったデータの2バイト文字(日本語)の処理
の意味で悩んでいます。

たとえば富とフォームから入力すると%C9%D9になっています。

        富  →   %C9%D9

富は$dataに入っているとします。
これを以下の処理でコード変換を行います。

  $data =~ s/%(..)/pack("c",hex($1))/ge;

hex($1)の$1には %C9、それともC9のどちらが渡されるのでしょうか?
hex関数を単独で実行した場合、

hex(%C9)だとうまくいきませんが、hex(C9)だとうまくいきます。
%はどんな扱いをされているのでしょうか?

どうぞ、よろしくお願いいたします。



無責任官庁 1999/04/27(火) 13:36:03
>hex($1)の$1には %C9、それともC9のどちらが渡されるのでしょうか?

これは正規表現の話しですね。
とりあえず、↓コレを見てもらうとして・・・
http://www.tohoho-web.com/wwwperl1.htm#Expr

すると、$1には、%(..)にマッチした時の(..)の部分が入る事に
なりますので、"%C9"の場合は、"C9"が入ります。

>hex(%C9)だとうまくいきませんが、hex(C9)だとうまくいきます。
>%はどんな扱いをされているのでしょうか?

ではまず16進数っていうモノは分かりますか?
この場合の"%C9"というのは、16進数での"C9"を現しています。
他の言語では、"&hC9"とか"0xC9"とか書いたりもします。
頭に何か付いてないと、単なる"C9"という文字との区別が
付かないですよね?それだけです。

hex(C9)に"%"が無いのは、hex()への引数は16進数のみなので、
他と区別する必要がないからそのまま"C9"なんだと思います。


ピーコ 1999/04/27(火) 14:33:02
[[解決]]
無責任官庁さん、ありがとうございました。
すっきりしました。

[上に] [前に] [次に]