CGI-BBS > 基礎 > jcode/jcode.pl > POSTで受け取ったデータが文字化けします


カレッヂ
カレッヂ


質問者 銀杏秋刀魚  投稿日 10/17(水) 16:46:37
みなさん、こんにちは。CGIはじめて半月の新参者です。どうぞよろしくお願いします。

フォーム(HTML)で入力したデータを、POSTで渡し、受け取った内容を表示する(CGI)
という基本的なCGIを作成しています。

サーバーはUNIXです。
CGIはSHIFT-JISで記述し、FTPソフトでUPするときに、アスキーモード・EUCでUPしています。
入力用のHTMLは、EUCなどの指定はせず、無変換でサーバーにUPしています。
このHTMLには、
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">
という記述も入れました。
しかし、表示結果は、POSTで受け取ったデータと、CGIの文章中で print"";で表示する
文字の、文字コードが別々のもので表示されているようです。

文字コードを統一しなくてはいけないことはわかるのですが、どのような方法で統一すれば
いいのでしょうか?

回答者 しあわせのツボ  [削除]  投稿日 10/17(水) 18:14:47
最終的にSJISで出力したいのかEUCで出力するのかによって対処が違います。
EUCで出力するなら、受け取った文字列もEUCに変換してcharset=euc-jpとすれば解決します。
metaタグの通りにSJISで出力したいなら、CGIにハードコーディングした文字列は全てprint前にSJIS変換しないといけません。
# CGIから送出するなら、meta http-equivを使うより、初めからHTTPヘッダに書いた方がいい気もしますが、それはそれ。

わざわざEUCで設置するということは、入力されたものもEUCに変換してから処理するのが普通だと思いますが、そのあたりはどうなっているでしょうか。
質問者 銀杏秋刀魚  [削除]  投稿日 10/18(木) 08:58:57
しあわせのツボさん、またまたお世話になりました。
ありがとうございます。

>CGIにハードコーディングした文字列は全てprint前にSJIS変換しないといけません
これは、エディターでプログラムを、Shift-JISで記述するということでしょうか?
それともSJIS変換するコードがありますか?

基本的には、SJISで出力したいのですが、サーバーがUNIXでも、CGIをSJISで
記述してもいいのでしょうか?

よろしくお願いします。

回答者 しあわせのツボ  [削除]  投稿日 10/18(木) 11:51:50
CGIをSJISで設置すること自体は問題ありません。実際、レスキューさんのスクリプトはその大部分がSJISでの設置を前提としています。
ただ、文字列中に特定の文字があると化けたりエラーになったりすることがありますので、それを回避する処理を入れる必要があります。EUCで記述した方がいいとされるのはそのためです。

SJISで設置するなら:
やってみて、もし上記のようなトラブルがあれば対処を考えます。

EUCで設置しEUCで出力するなら:
読み込んだ入力を &jcode::convert("入力文字列",'euc'); のようにEUC変換してから処理します。

EUCで設置しSJISで出力するなら:
入力をEUCに変換した上で、全ての日本語が絡むprint文を print (&jcode::euc2sjis("出力文字列")); のようにSJIS変換して出力するよう変更する
質問者 銀杏秋刀魚  [削除]  投稿日 10/18(木) 13:48:20
よくわかりました。どうもありがとうございました。

書いていただいたこと、今本当に知りたいことでした。
嬉しかったです。感謝しています。
今後ともよろしくお願いします。

このページは終了したので返信(回答)は書きこめません

Web裏技