Perl cgiの文字化けを直したい (UTF8)
現在、jcode.plを使用したShift JISで構成されていた Perlのcgi を UTF-8 に改造しています。
フォームに書き込んだPAGETITLEを別ファイルへUTF-8で書きこむ際に、文字化けしてしまいます。
書きこんだファイルを開けてみると、日本語が文字化けしています(アルファベットは大丈夫)
以下のPerlのPAGETITLEをどのように改造すれば、文字化けしないで、$foundations_fileへUTF-8で書き込みすることができるのでしょうか?
※個人的にはデータ書き込みの sub REGIST 以下を改造すれば良いのではと推測していますが、どうやれば良いのか分かりません。
どうかご教示、よろしくお願い致します。
m(_ _)m
-------------------------------------
#!/usr/bin/perl
use utf8;
binmode STDIN,":utf8";
binmode STDOUT,":utf8";
#基本セットアップファイル読込
require './setup_manage.cgi';
#このファイル
$cgi = "./foundations.cgi";
#デコード処理
&DECODE;
sub VIEW {
#基本設定ファイルの読み込み
&FOUNDATIONS_READ;
【省略】
<TABLE width="100%" border="0" cellspacing="0" cellpadding="1"><TR>
<TD width="70%">変更するデータを直接書き換えて [ 編集実行 ] を押して下さい。</TD>
<FORM method="post" action="./login.cgi">
<TD width="30%" align="right"><INPUT type="submit" value="メインメニューに戻る"></TD>
<INPUT type="hidden" name="mode" value="main">
<INPUT type="hidden" name="pw" value="$in{'pw'}">
</FORM>
</TR></TABLE>
【省略】
<TABLE border="0" cellspacing="1" cellpadding="4" bgcolor="#999999"><TR>
<FORM name="SUBMIT" method="post" action="$cgi" onSubmit="return kakunin()">
<TD width="160" bgcolor="#eeeeee">
<TABLE border="0" cellspacing="0" cellpadding="1"><TR>
<TD>ページタイトル</TD>
</TR></TABLE>
</TD>
<TD width="400" bgcolor="#ffffff">
<TABLE border="0" cellspacing="0" cellpadding="1"><TR>
<TD><INPUT type="text" name="PAGETITLE" size="60" value="$PAGETITLE"></TD>
</TR></TABLE>
</TD>
【省略】
-------------------------------------------------
# データ書き込み
#-------------------------------------------------
sub REGIST {
#全角英数字を半角に変換
$zenkaku = '0123456789';
$hankaku = '0123456789';
$in{'PAGETITLE'} =~ s/\,/&%/g;
$in{'PAGE1'} =~ s/\,//g;
$in{'PAGE2'} =~ s/\,//g;
$in{'PAGE3'} =~ s/\,//g;
$in{'CATECOL'} =~ s/\,//g;
$in{'PERIOD'} =~ s/\,//g;
$in{'TABLECOL'} =~ s/\,//g;
$in{'SIZECOL'} =~ s/\,//g;
$in{'SIZEROW'} =~ s/\,//g;
$in{'COPYRIGHT'} =~ s/\,/&%/g;
#ファイルロック開始
if( $lockkey ne '0' ){ &LOCK; }
#ファイルに書きこむ
if (!open(OUT,">:utf8",$foundations_file)) { &ERROR( read_foundations ); }
print OUT "$datenow,$in{'PAGETITLE'},$in{'INIMODE'},$in{'MODECHG'},$in{'PAGE1'},$in{'PAGE2'},$in{'PAGE3'},$in{'CATEVIEW'},$in{'CATECOL'},$in{'INICATE'},$in{'PERIOD'},$in{'RANKING'},$in{'CMODE'},$in{'RANKVIEW'},$in{'TITLEVIEW'},$in{'SRCHVIEW'},$in{'INPVIEW'},$in{'DATAROW'},$in{'TABLECOL'},$in{'BARCLR'},$in{'BARPER'},$in{'IMGPRT'},$in{'IMGSIZE'},$in{'SIZECOL'},$in{'SIZEROW'},$in{'IMGFRM'},$in{'COPYRIGHT'},$in{'GPVIEW'},";
close(OUT);
#ファイルロック解除
if( $lockkey ne '0' ){ &UNLOCK; }
&COMP;
}
お礼
init.cgiをいじるんでしたか…。 教えていただいたとおりにやってみたらできました!ありがとうございます!! あと@weekの宣言を日 月 火 …にしても文字化けは起こりませんでした!