プロが教える店舗&オフィスのセキュリティ対策術

こんにちは初心者です。
現在、既存のperl cgiをカスタマイズしております。
エンコードをshift_jisからUTF8に変更したいのですが、表示はCGI自体をUTF-8に変更し普通に見ることができるのですが、書き込みをしようとすると文字化けがおこります。
jcode.plをjcode.pmに変換すればよいらしいまでは分かったのですが、どこをどう変換すればいいのかjcode.pmのサイトを見ても理解できません。簡単な説明サイト紹介やアドバイス等をいただけませんでしょうか?

A 回答 (4件)

> jcode.plをjcode.pmに変換すればよいらしいまでは分かったのですが、


> どこをどう変換すればいいのか

CGI プログラム中に、

&jcode'convert(\$line, "euc", "sjis");

とか

&jcode::convert(\$line, "euc", "sjis");

のような記述がないでしょうか?

jcode.pl によって、
「どの変数」を「何の文字コード」から「何の文字コード」へ変換しているのかを、まず知る必要があります。


jcode.pl の使い方については、
「jcode.pl の私的な解説書」が詳しいです。
↓参考URL

参考URL:http://mikeneko.creator.club.ne.jp/~lab/kcode/jc …
    • good
    • 0

>jcode.plが使用されています。

この場合jcode.pmを使えばよろしいいんでしょうか?
現状ですでになにかしらの文字コード変換が行われているってことですね。
でUTF-8に対応させるためにjcode.pmを使うってことですね。
まず確認しないといけないのがjcode.pmがインストールされているかどうかですね。
通常はサーバ管理者がCPANでインストールするけど
http://tech.bayashi.net/faq/jcodepm.html
でのように強制的にインストールできないことも無いけど
これでサーバ管理者から怒られても知らない。

この回答への補足

jcode.pmはサーバインストール済みです。
またperlのバージョンも問題ありません。

補足日時:2007/11/01 17:01
    • good
    • 0

プログラムの文字コードはUTF-8と考えていいんですね?


・プログラムがSJISで出力データをUTF-8ではなくて
・プログラムがUTF-8で出力データもUTF-8ということですよね?
>表示はCGI自体をUTF-8に変更し普通に見ることができるのですが、書き込みをしようとすると文字化けがおこります。
その書き込みページ(html)の文字コードは?
書き込みページがSJISならプログラムでそのページから取得したデータを
UTF-8に変換(ここでjcode.plまたはJcode.pmを使う)の必要があります。
ただ
入力htmlがUTF-8でプログラムもプログラムから出力されるものもUUTF-8なら
文字コード変換は必要ないはずなんですけどね。

この回答への補足

回答ありがとうございます。
もともとのモジュールはperl cgiと表示用のhtmlテンプレートで構成されており、文字コードはすべてshift_jsでした。
オークションスクリプトになります。
テンプレートHTMLとCGIすべてUTFにしました。見るだけであれば通常通り表示されますが、書き込み等を行うと書き込まれた文字だけが文字化けしてしまいます。jcode.plが使用されています。この場合jcode.pmを使えばよろしいいんでしょうか?
またjcode.pmのサイトを見たのですが、なんとなくは分かるのですが具体的な変更方法がわからず困っています。
またもうひとつですが、CGIはすべてUTFにしたのですが書き込み等を記録するデータログファイル(CGI)をUTFに変換しようとしても最初のデータが書き込まれるまではゼロバイトなのでUTFに変換しても認識しないのかわかりませんがエディタで開くとshift_jisとなってしまいます。
ゼロバイトのファイルをUTFにしてもだめなのかと思いUTF(BOM)にすると3バイト増えエディタで開くとちゃんとUTF(BOMあり)として認識されます。このときこのBOMというのはBOMなしのUTFスクリプトと混在させて問題等は起こらないのでしょうか?

補足日時:2007/10/31 20:46
    • good
    • 0

http://openlab.jp/Jcode/index-j.html

の「使用例」にちょうど、jcode.plをjcode.pmに変換することが記されています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!