【Jcode.pmの使い方】kentwebさんのショッピングカート「WEB MART」(http://www.kent-web.com/cart/mart.html)をワードプレスのページ内に設置したいです。しかし、文字コードが、wordpress「UTF-8」・WEB MART「SHIFT_JIS」と違っているため、フォームの情報が、ショッピングカード内では、一部文字化けしてしまいます。WEB MARTには、文字コード変換モジュール「Jcode.pm」が同梱されておりますが、「Jcode.pm 使い方」でググってみたのですが、わかりません。どなたか、Jcode.pmを使って、UTF-8のページでも文字化けせずに、WEB MARTを動かせる手順を教えてください。宜しくお願いいたします


「Jcode.pm 使い方」のウェブページの紹介はではなく、実際の手順を回答にしてください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/23 17:26:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント500pt

Jcode.pm 自体は、この CGI プログラム中で使われているもので、実際に、CGI プログラムの中身を見てみると、admin.cgi と order.cgi で使われています。


このプログラムが Shift_JIS での出力を前提にしているので、もし、これを使うのであれば、

  1. CGI プログラムのファイルをエディタ等で UTF-8 に変換して保存。
  2. プログラム中にある、「Jcode::convert(なんちゃら, 'sjis')」という部分の 'sjis' を 'utf8' に変更。
  3. プログラム中にある、'shift_jis' を 'UTF-8' に変更。

といった修正作業が必要になります。


でなければ、この CGI の出力をインラインフレームの中にでも入れて、「全体は UTF-8 だけど、この中は Shift_JIS」といった形で逃げられるかもしれません。

id:motoi20

回答いただき、ありがとうございます

ご指摘いただいた3つのことを実施したところ、Internal Server Errorになりました

「HTTP エラー 500(Internal Server Error): サーバーによるリクエストの実行中に、予期しない状況が発生しました。」


ちなみに、1.のご指摘を置いておいて、プログラムファイル・tmplファイルの文字コードを、

Shift_JISで実行すると、表示されますが、文字化けした状態になります

※ tmplファイルは、カートを遷移するときに表示されるHTMLファイルのことです


ちなみに、ご指摘に対する変更点は以下のとおりです

何か、間違っていること、もれていることがありますでしょうか

大変お手数ですが、ご確認、ご返信いただけますと大変嬉しく思います

よろしくおねがいいたします



> 1. CGIプログラムのファイルをエディタ等で UTF-8 に変換して保存。

WEB MART内のcgiファイルをUTF-8に書き換えました

(文字コード変換ツール for .NET 2.0を使いました)

admin.cgi

check.cgi

init.cgi

mart.cgi

order.cgi


WEB MART内のtmplファイルをUTF-8に書き換えました

もちろん、メタタグもUTF-8に書き換えました

※ tmplファイルは、カートを遷移するときに表示されるHTMLファイルのことです


> 2. プログラム中にある、「Jcode::convert(なんちゃら, 'sjis')」という部分の 'sjis' を 'utf8' に変更


■admin.cgi

555~556行目、sjis → utf8 に変換

# コード変換

Jcode::convert(\$q_item, 'sjis');

Jcode::convert(\$q_item, 'utf8');

■order.cgi

560~561行目、sjis → utf8 に変換

# コード変換

Jcode::convert(\$mbody1, 'jis', 'sjis');

Jcode::convert(\$mbody2, 'jis', 'sjis');

Jcode::convert(\$mbody1, 'jis', 'utf8');

Jcode::convert(\$mbody2, 'jis', 'utf8');


687~688行目、sjis → utf8 に変換

# コード変換

Jcode::convert(\$q{$key}, 'sjis');

# コード変換

Jcode::convert(\$q{$key}, 'utf8');



> 3. プログラム中にある、'shift_jis' を 'UTF-8' に変更。


■admin.cgi

613行目、shift_jis → UTF-8

print $q->header(-charset => 'shift_jis');

print $q->header(-charset => 'UTF-8');

617行目、shift_jis → UTF-8


■mart.cgi

117行目、shift_jis → UTF-8

print $q->header(-charset => 'shift_jis', -cookie => $cookie);

print $q->header(-charset => 'UTF-8', -cookie => $cookie);


■order.cgi

132行目、shift_jis → UTF-8

print $q->header(-charset => 'shift_jis');

print $q->header(-charset => 'UTF-8');


301行目、shift_jis → UTF-8

print $q->header(-charset => 'shift_jis', -cookie => $cookie);

print $q->header(-charset => 'UTF-8', -cookie => $cookie);


621行目、shift_jis → UTF-8

print $q->header(-charset => 'shift_jis', -cookie => $cookie);

print $q->header(-charset => 'UTF-8', -cookie => $cookie);



■check.cgi

20行目、shift_jis → UTF-8

2011/06/23 15:11:54
  • id:motoi20
    返信の続きです

    ■check.cgi

    20行目、shift_jis → UTF-8

    <meta http-equiv="content-type" content="text/html; charset=shift_jis">

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  • id:JULY
    > ご指摘いただいた3つのことを実施したところ、Internal Server Errorになりました

    恐らくは、修正の過程で何かミスがあったものだと思います。
    手元で同様の修正をしてみた感じでは、UTF-8 の出力で動きました。

    Web サーバの error.log を見ると、CGI のどの辺でエラーになったのか、ヒントになる情報が見つかるかもしれません。

    もし、コマンドラインの perl が使えるのなら、

    --------------------------------------
    perl -c admin.cgi
    --------------------------------------

    とすると、CGI プログラムの文法チェックができます。もし、文法上のエラーが見つかれば、どの辺りで間違いがあったのか教えてくれます。

    あと、可能性があるものとしては、UTF-8 の BOM の有無です。BOM 付きの UTF-8 の場合、正常な CGI プログラムファイルとは判断されないため、やはり Internal Server Error になります。

    変換ソフトによっては、UTF-8 とすると BOM 付き、UTF-8N とすれば BOM 無し、といった区別をしている場合があります。
  • id:motoi20
    変換ソフトを使わず秀丸エディタで、BOM 無しを指定し、UTF-8に変換したら動作しました。

    大変感謝しております

    本当にありがとうございました

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません