比这篇新的文章: 支持豆瓣的zotero的translator
比这篇旧的文章: [C语言]加强输入的健壮性(long,double)

做邮件标题解码的perl代码

语言: Perl, 标签: procmail perl 2009/02/16发布 1年前更新
作者: rui, 点击436次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
01 #!/usr/bin/perl 
02     $sub=join(" ",@ARGV); 
03     if ($sub=~ /=\?\S+\?\l(\S)\?/) { 
04       if ($1 =~ /[Qq]/) { 
05         $sub=decode_qp($sub); 
06       } 
07       elsif ($1 =~ /[Bb]/) { 
08         $sub=decode_base64($sub); 
09       } 
10     } 
11     elsif ($sub=~ /=[a-fA-F0-9][a-fA-F0-9]/) { 
12       $sub=decode_qp($sub); 
13     } 
14     $subject.=$sub; 
15     $subject=~s/\'/\\\'/g; 
16     $subject=~s/\"/\\\"/g; 
17 print $subject; 
18 sub decode_qp { 
19         my($string) = @_; 
20         @buffer=split(/\?/,$string); 
21         $string = $buffer[3] if ($buffer[3] ne ""); 
22         $string =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; 
23         $string =~ /\?=(.*)/; 
24         $string =~ tr/_/ /; 
25         $buffer[4]=~s/^=//; 
26         $buffer[0]=~s/=$//; 
27         $string="$buffer[0]$string$buffer[4]"; 
28         return($string); 
29 } 
30  
31 sub decode_base64 { 
32         my($string) = @_; 
33         my($string2); 
34         @buffer=split(/\?/,$string); 
35         $string = $buffer[3] if ($buffer[3] ne ""); 
36         $string =~ s/=+$//; 
37         $string =~ tr|A-Za-z0-9+/| -_|; 
38         while($string =~ /(.{1,60})/gs) { 
39                 my($string3) = chr(32+length($1)*3/4); 
40                 $string2 .= unpack("u",$string3 . $1 ); 
41         } 
42         $buffer[4]=~s/^=//; 
43         $buffer[0]=~s/=$//; 
44         $string2="$buffer[0]$string2$buffer[4]"; 
45         return($string2); 
46 }


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论