入力データの取り出し方 フォームとCGI目次 <form>タグ

日本語の処理

テキストエリアに日本語を入力し、Perlで処理を行う場合、内部処理を EUCコードで行えば問題ありませんが、他のコードを使用している場合は、一度EUCコードに変換してあげれる必要があります。コード変換は、nkfコマンドや jcode.plを使用します。下表はjcode.plで使用できる関数です。

nkf-1_5pl1_tar.gz
jcode_pl-1.9
jcode.plの関数
関数機能
&jcode'getcode(*line) 漢字コードの判別
&jcode'convert(*line, $ocode [, $icode]) コード変換


たとえば、先程の簡易Perlライブラリを例に考えてみます。GETの場合は適当な漢字コードに変換すればよいのですが、Perlで日本語処理を行う場合、EUC以外は難しいようです。従って、内部処理をEUCにして、書き込む場合もやはりEUCにするか、他の適当なコードへ変換するかを考えて下さい。

下記に簡易 Perl ライブラリを使った例を示しますが、他にも方法はあると思います。

        
        
        require 'jcode.pl';
        
        sub read_input
        {
            local ($buffer, @pairs, $pair, $name, $value, %form);
            # Read in text
            $env{'request_method'} =~ tr/a-z/A-Z/;
            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);
                $value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                &jcode'convert(*value, 'euc');
                $form{$name} = $value;
            }
            %form;
        }
        
        


Copyright (C) 1996-2003 by Yasukazu Yokoi. All Rights Reserved.