![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在、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;
}
No.2
- 回答日時:
コードを1つ1つ追跡すれば問題箇所が分かるかもしれませんが、もし%inに入っている値が全てフォームから来る文字列ならば、以前と同じようCGI.pmに丸投げしてみてはどうでしょうか?
# これはコメントアウト
#binmode STDIN,":utf8";
# %inに代入してるところを以下に変更
use Encode;
use CGI;
%in = map decode_utf8($_), CGI->new->Vars;
ryu_chanさま
またご回答頂きまして、ありがとうございました!
#binmode STDIN,":utf8"; として、
#$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;
# %inに代入してるところを以下に変更
use Encode;
use CGI;
$in = map decode_utf8($_), CGI->new->Vars;
と変更してみましたが、やはり症状は変わりませんでした。
上記変更方法が間違えているのでしょうか・・・・
No.1
- 回答日時:
データをどう取り込んでるか知らんけど, 最悪
何を入力したらどう「化けた」出力が得られるか
を調べて, あとは文字コードから「化け具合」を見付ければなんとかなるかもしれん.
でも, 「REGIST」って何を意味するんだろう. resist のタイポじゃないよなぁ....
Tacosan様、ご回答ありがとうございました。
日本語を入力すると、化けてしまいます。
(アルファベットは化けません)
多分、UTF-8で外部ファイルへ書き込めていないからだと推測しています。
具体的には、どうすれば良いでしょうか?
どうぞよろしくお願い致します。
m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで時間の計算
-
テキストファイルで提出とは?
-
積分計算の答えが合いません・・・
-
Perlで、「が」を、「...
-
アルファベットに付いて質問し...
-
ファイルをディレクトリ分配の...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlをwindows環境でshift-jis...
-
Perl cgiの文字化けを直したい ...
-
perlでuse utf8でsjisのファイ...
-
HTTP::Request::Common qw(POST...
-
does not map to shiftjis は解...
-
Perl:Unicodeプロパティ作れない
-
消費税の計算で 税込価格から...
-
Perlでのファイル出力における...
-
Perl utf8上でshiftjisをデコード
-
Data::Dumper;でダンプ後表示し...
-
複数種類の括弧でくくられてな...
-
ファイル出力をUTF8Nではなくて...
-
[Perl]Shift-JISのXMLを解析する場
-
utf-8での日本語正規表現の書き方
-
perlでのtext読み込み
-
perl5.8.3のunicode環境で日本...
-
[perl5.8] SJISから読み込んだ~と
-
perlで新規ファイルを作成でき...
-
Perl 正規表現について
-
じゃらんのAPIでRESTで取得した...
おすすめ情報