CGI講座 ≫ 日本語について

日本語の文字コード

普通のPCで主に使われている日本語のコードはShift-JISというものです。 が、インターネット上のWebサーバの置いてあるマシンでは他の文字コードを使っていることが多いです。おおざっぱな事は、ホームページ作成の「HTMLを書いてみよう!」で説明してあります。

CGIでは、よくデータをフォーム等から入力してもらい、その結果を集計して表示したりしています。
が、この時相手の環境によって送られてくるデータの日本語コードは異なる場合があるので、CGI側で統一しておかないと問題が発生します。

あとは、例えば自分がShift-JISでコードを書いていても、途中でデータベースや他のサーバからの結果を取り込んで出力する時、コードが違っていれば表示時に不都合が生じます。

ということで日本語を扱う時、特に入力されたデータは文字コードを統一されることが必要です。
コードの変換方法はPerlとPHPに分かれてそれぞれ紹介します。

Perlの変換方法

基本的にライブラリを利用します。

● jcode.pl
よく利用されてきた有名なスクリプトです。 最新バージョンはこちらで配布されています。

さて、この使い方ですが、色々関数が用意されていますが、とりあえずコード変更だけ説明します。
jcode.plを読込み、関数convertを実行します。
引数には変換する変数(参照渡し)と、変換したいコードを指定します。

require "cgi-lib.pl";
&ReadParse(*in);
my $v = $in{'J_Name'};

#jcode.plを呼びます。
require "jcode.pl";

#eucに変換する。
#変換するデータは、関数に参照渡しします。
&jcode'convert(\$v, 'euc');

変換するコードの指定は、”sjis”・”jis”・”euc”の3種類です。
フォームから取ったユーザ入力値を扱いたい場合、まず値を取り込み、そのあとで必要ならばデータの日本語コードを変更してから処理します。

jcode.plには他にも文字コードを調べることのできる関数もありますので、jcode.plの中を見て確認してください。

● NKFモジュール
NKFモジュールが用意されているperlで使えます。
日本語変換ツールnkfのperlモジュールです。
使い方は以下の通り。
NKFモジュールを読込み、nkf関数に変更モードと、変更する値を引数にして実行します。

nkf('-jZ(変換後の文字コード指定)', 変更値 )

というように指定します。(変換後の文字コード指定)とは、Shift-JISの場合x、 EUCの場合aとなります。

require "cgi-lib.pl";
&ReadParse(*in);
my $v = $in{'J_Name'};

#モジュールを呼びます。
use nkf;

#Shift-JISに変換。
my $html = nkf('-jZx', "$v" );


● Jcodeモジュール
Jcodeモジュールが用意されているperlで使えます。
jcode.plをモジュール化したものですが、Perlのヴァージョンの制限があります。
使い方は以下の通り。
Jcodeモジュールを読込み、あとはjcode.plと同じです。

require "cgi-lib.pl";
&ReadParse(*in);
my $v = $in{'J_Name'};

#モジュールを呼びます。
use Jcode;

#sjisに変換する。
Jcode::convert(\$v,'sjis');


借りてるWebサーバにNKFモジュールやJcodeモジュールが入ってない場合は、無難にjcode.plをrequireして使いましょう。



PHPの変換方法

PHPの場合はmb_convert_encodingを使います。

mb_convert_encoding(変換文字列, 変換したいコード, 変換前のコード)

と書きます。注意するのは、変換したいコードが先にくることです。

$str = "日本語文字列";
$str = mb_convert_encoding($str, "UTF-8", "SJIS");

この場合、SJISからUTF-8に変換されます。
文字コードの指定は

ASCII, JIS, UTF-8, EUC-JP, SJIS, auto

です。autoを指定すると、ASCII, JIS, UTF-8, EUC-JP, SJISから順に探ります。
さらに注意することは、SJISとEUCだと、一部変換対応できない文字があります。

それぞれ

SJIS → SJIS-win
EUC → EUC-win

とすると確実です。

また、PC環境で実行するとmb_convert_encoding関数自体ないよー!って注意されることがあります。これはPHPで使える設定になっていないせいです。
php.iniを開いて、

;extension=php_mbstring.dll

行頭のセミコロン「;」を消して、コメントをはずします。
保存してApacheの再起動をかければ使えるようになるはずです。



ページのトップへ戻る