![]() |
カレッヂ |
質問者 銀杏秋刀魚
投稿日 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裏技 |