TrackBack乱码,没有安装Text::Iconv模块的解决办法

近日一直被MT引用通告乱码所困扰,虽然Google到了Hedong消除收到trackback的乱码文章,还有WindixTrackback乱码:我的解决方法。但一由于我的空间上没有安装CGI的Text::Iconv模块,二Windix并没有提供自己写的编码转换Douconv库,我只能望洋兴叹。不过我用的空间是Linux主机,安装有iconv common包,可以使用iconv命令,因此尝试用Perl执行命令来解决转码问题,下面是具体的解决方法(当然,这里要感谢Hedong前辈已有的方法,我是在其基础上稍加变化实现的):

在$MTHOME/lib/MT/App/Trackback.pm的ping函数中找到:

my $ping = MT::TBPing->new;
$ping->blog_id($tb->blog_id);
$ping->tb_id($tb_id);
$ping->source_url($url);
$ping->ip($app->remote_ip || ''); 

在其前面加上:

#################convert gb2312 into utf-8 if necessary#######
require LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $url);
my $res = $ua->request($req);
if ($res->is_success) {
     my $content=$res->content;
     if ($content =~ /text\/html.*charset=.*gb.*>/gi ){
        $excerpt = `echo $excerpt | iconv -f GB2312 -t UTF-8`;
        $title = `echo $title | iconv -f GB2312 -t UTF-8`;
        $blog_name = `echo $blog_name | iconv -f GB2312 -t UTF-8`;
    }
}

##############end convert gb2312 to utf8##################

完毕!

上述修改在MT 3.x版本上适用,依照Hedong所说,如果系统安装了mt-blacklist,则需要修改$MTHOME/extlib/jayallen/MTBlPing.pm,位置相同。