デコードしてエンコードしてるつもりなのに
「フォームへの自動入力→送信」という
ごくシンプルなスクリプトを作っているんですが、
文字化けが止まらない。
調べる→試しに実装→文字化け→調べる・・・
という文字化けヘビーローテーションの
輪廻地獄から抜け出せずにいます。
自ら設置したテストcgiフォームに
文字化け登録データがうず高く積まれています。
調べてるときに凄く参考になった記事をメモ。
Encode.pmのメンテナー弾さんの「perl - use encoding; #は黒歴史」
何かをくわえているtokuhiromさんのPerl で utf8 化けしたときにどうしたらいいか
【課題】
※文字化けから抜け出せない
■現状・・・ハードコーディングなので、flagged utf8化されているであろう入力データを出力時にshiftjisにエンコード。受ける側のフォームcgiはshift_jisで受ける設定。フォームcgiを設置したhtmlのcharacterもshift_jis。落とし穴はどこにあるんだろう?
#!/usr/bin/perl -w
#
# WWW::Mechanizeを使って、フォーム登録を自動にしようじゃないかという企み
#ハードコーディング de シンプルテストuse strict;
use WWW::Mechanize;
use utf8;
use Encode;#入力データを格納
my @inputs = (
'ホゲホゲサイト',
'http://www.hogehoge.com/',
'世にも奇妙なホゲホゲなサイトです。',
'ホゲホゲ キーワード',
'hoge_admin_name',
'hogehoge@XXX.com',
'hoge_hoge',
'pass',
);# WWW::Mechanizeクラスのnewメソッドをもつmechオブジェクトを生成
my $mech = WWW::Mechanize->new();
$mech->agent_alias( 'Windows IE 6' );# フォームURLにアクセスし、
$mech->get('http://www.hogehoge.com/test_form.html');# ステータスのチェック
print "current URI?\n" . $mech->uri() ."\n";
print "current Title?\n" . encode("shiftjis",$mech->title()) ."\n\n";# フォームへデータを出力
$mech->field( 'site_name', encode("shiftjis",$inputs[0]) );
$mech->field( 'site_url', encode("shiftjis",$inputs[1]) );
$mech->field( 'site_title', encode("shiftjis",$inputs[2]) );
$mech->field( 'site_key', encode("shiftjis",$inputs[3]) );
$mech->field( 'site_admin_name', encode("shiftjis",$inputs[4]) );
$mech->field( 'site_admin_mail', encode("shiftjis",$inputs[5]) );
$mech->field( 'admin', encode("shiftjis",$inputs[6]) );
$mech->field( 'pass', encode("shiftjis",$inputs[7]) );$mech->submit();
# ステータスのチェック
print "current URI?\n" . $mech->uri() ."\n";
print "current Title?\n" . encode("shiftjis",$mech->title()) ."\n\n";
ん〜、MecのFIELD METHODのvalueでエンコードしてるのがマズイのかなぁ・・・??