稲沢市よりお届けしてます。

Perlをはじめとしたプログラミング周りのあれこれについて。Perl界のモブキャラとして暗躍します(謎)。

デコードしてエンコードしてるつもりなのに

「フォームへの自動入力→送信」という
ごくシンプルなスクリプトを作っているんですが、

文字化けが止まらない。

調べる→試しに実装→文字化け→調べる・・・


という文字化けヘビーローテーション
輪廻地獄から抜け出せずにいます。


自ら設置したテストcgiフォームに
文字化け登録データがうず高く積まれています。

調べてるときに凄く参考になった記事をメモ。

Encode.pmのメンテナー弾さんの「perl - use encoding; #は黒歴史」

同じく弾さんのperl - Encode 入門

何かをくわえているtokuhiromさんのPerl で utf8 化けしたときにどうしたらいいか



【課題】
※文字化けから抜け出せない

■現状・・・ハードコーディングなので、flagged utf8化されているであろう入力データを出力時にshiftjisにエンコード。受ける側のフォームcgishift_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でエンコードしてるのがマズイのかなぁ・・・??