放送大学 2022年10月入学生
第1回出願 2022年6月10日〜8月31日
第2回出願 2022年9月1日〜9月13日
インターネット出願ならすぐに申し込めます。
放送大学の視聴方法についてはカテゴリー「講義視聴」をご覧下さい。
Macでのストリーミング視聴等も詳しく説明しています。
ちょこっとアンケートを設置しています。
CGI設置覚書 ― 2017/03/12 02:10
投票設置にあたり、以前使用していたフリー配布CGIを引っ張り出す。
こういう作業はすぐに忘れるので覚書。
設置するこのブログ(アサブロ)は文字エンコードがUTF-8。
しかしCGIはShift-JISを吐き出すため、投票時のコメントが文字化けする。
対策として、CGI同梱のJcode.plをUTF-8に対応したJcode.pmに入れ替え。
併せてCGI内の該当箇所を書き換え。
●冒頭
require './jcode.pl';
↓
use Jcode;
●文字変換部分
&jcode::h2z_sjis (*val);
&jcode::convert(*val, 'sjis', '', 'z');
↓
Jcode->new(*val,"utf8")->h2z->euc;
(※h2z……半角カナ→全角カナ変換)
●注意点
・jcode::からJcode::という、単なる置き換えではダメ。
ここでしばらくつまずいた。(参考サイト1)
・Jcode.pmで文字列比較などを行う場合、HTMLフォームから受け取るUTF-8の文字列はいったん内部コードをeucにして処理を行う。
Jcode->new(*val)->h2z->utf8;では文字化けは直らない。
また、受け渡す値の文字コードは明示しておいたほうがいい。
省略してJcode->new(*val)->h2z->euc;としても、やはり直らない。(参考サイト2)
・プログラム同梱のログ等のひな形ファイル、xxx.log、xxx.datの文字コードをUTF-8にしておく。すでに作成されたファイルも同様。
でないと、CGIは全て修正されたはずなのに何故文字化けが続く!?と発狂することになる。
読み込んでいるlog、datデータがShift-JISのままなことにようやく気付けてよかった。
ちなみにPerl 5.8からはEncode.pmが標準モジュールとなっているので、いずれこちらも試してみよう。(参考サイト3)(参考サイト4)
こういう作業はすぐに忘れるので覚書。
設置するこのブログ(アサブロ)は文字エンコードがUTF-8。
しかしCGIはShift-JISを吐き出すため、投票時のコメントが文字化けする。
対策として、CGI同梱のJcode.plをUTF-8に対応したJcode.pmに入れ替え。
併せてCGI内の該当箇所を書き換え。
●冒頭
require './jcode.pl';
↓
use Jcode;
●文字変換部分
&jcode::h2z_sjis (*val);
&jcode::convert(*val, 'sjis', '', 'z');
↓
Jcode->new(*val,"utf8")->h2z->euc;
(※h2z……半角カナ→全角カナ変換)
●注意点
・jcode::からJcode::という、単なる置き換えではダメ。
ここでしばらくつまずいた。(参考サイト1)
・Jcode.pmで文字列比較などを行う場合、HTMLフォームから受け取るUTF-8の文字列はいったん内部コードをeucにして処理を行う。
Jcode->new(*val)->h2z->utf8;では文字化けは直らない。
また、受け渡す値の文字コードは明示しておいたほうがいい。
省略してJcode->new(*val)->h2z->euc;としても、やはり直らない。(参考サイト2)
・プログラム同梱のログ等のひな形ファイル、xxx.log、xxx.datの文字コードをUTF-8にしておく。すでに作成されたファイルも同様。
でないと、CGIは全て修正されたはずなのに何故文字化けが続く!?と発狂することになる。
読み込んでいるlog、datデータがShift-JISのままなことにようやく気付けてよかった。
ちなみにPerl 5.8からはEncode.pmが標準モジュールとなっているので、いずれこちらも試してみよう。(参考サイト3)(参考サイト4)
コメント
トラックバック
このエントリのトラックバックURL: http://nekonote.asablo.jp/blog/2017/03/10/8399272/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。