<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>2006/03/10 on Yano&#39;s digital garage</title>
    <link>https://www.bravotouring.com/~yano/archives/2006/03/10/</link>
    <description>Recent content in 2006/03/10 on Yano&#39;s digital garage</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 10 Mar 2006 23:16:15 +0900</lastBuildDate>
    <atom:link href="https://www.bravotouring.com/~yano/archives/2006/03/10/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ウェブメーラー再び改修</title>
      <link>https://www.bravotouring.com/~yano/diary/it/20060310webmail.htm</link>
      <pubDate>Fri, 10 Mar 2006 23:16:15 +0900</pubDate>
      <guid>https://www.bravotouring.com/~yano/diary/it/20060310webmail.htm</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20060308webmail.htm&#34;&gt;一昨日改修した&lt;/a&gt;ばかりだが、またしても一部の&lt;span class=&#34;Warning&#34;&gt;Subjectがデコードされない&lt;/span&gt;問題発覚。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.willcom-inc.com/&#34;&gt;WILLCOM&lt;/a&gt;の&lt;span class=&#34;Strong&#34;&gt;『Pic＠nic-Mail　通話明細照会内容更新のお知らせ』&lt;/span&gt;が&lt;span class=&#34;Strong&#34;&gt;&#34;=?ISO-2022-JP?Q?&#34;&lt;/span&gt;だったので、&lt;span class=&#34;Path&#34;&gt;mimir.pl&lt;/span&gt; の mimedecode に追加対処するなり。&lt;blockquote class=&#34;Log&#34;&gt;&#xA;&lt;span class=&#34;Highlight&#34;&gt;## charset=`ISO-2022-JP&#39;,encoding=`Q&#39; の encoded-word にマッチするパターン&lt;br/&gt;&#xA;$match_mime_qp = &#39;=\?[Ii][Ss][Oo]-2022-[Jj][Pp]\?[Qq]\?([^\?]+)\?=&#39;;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;span class=&#34;Highlight&#34;&gt;## charset=`utf-8&#39;,encoding=`Q&#39; の encoded-word にマッチするパターン&lt;br/&gt;&#xA;$match_mime_utf_qp = &#39;=\?[Uu][Tt][Ff]-[78]\?[Qq]\?(.+)=*\?=&#39;;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&#xA;## &amp;bodydecode が使う処理残しデータ用バッファ&lt;br/&gt;$bdebuf = &#34;&#34;;&lt;br/&gt;&lt;br/&gt;&#xA;## mimedecode interface ##&lt;br/&gt;sub main&#39;mimedecode {&lt;br/&gt;&#xA;    local($_, $kout) = @_;&lt;br/&gt;&#xA;    1 while s/($match_mime)[ \t]*\n?[ \t]+($match_mime)/$1$3/o;&lt;br/&gt;&#xA;    s/$match_mime/&amp;kconv(&amp;base64decode($1))/geo;&lt;br/&gt;&#xA;&lt;span class=&#34;Highlight&#34;&gt;s/$match_mime_qp/&amp;kconv(&amp;qpdecode($1))/geo;&lt;/span&gt;&lt;br/&gt;&#xA;&lt;span class=&#34;Highlight&#34;&gt;s/$match_mime_utf_qp/&amp;kconv(&amp;qpdecode($1))/geo;&lt;/span&gt;&lt;br/&gt;&#xA;    s/(\x1b[\$\(][BHJ@])+/$1/g;&lt;br/&gt;&#xA;    1 while s/(\x1b\$[B@][\x21-\x7e]+)\x1b\$[B@]/$1/;&lt;br/&gt;&#xA;    1 while s/(\x1b\([BHJ][\t\x20-\x7e]+)\x1b\([BHJ]/$1/;&lt;br/&gt;&#xA;    s/^([\t\x20-\x7e]*)\x1b\([BHJ]/$1/;&lt;br/&gt;&#xA;    $_;&lt;br/&gt;}&lt;/blockquote&gt;&#xA;これだけなら何て事無かったのだが、さらに「途中から漢字が化ける」という難儀な問題が隠れていた。&lt;/p&gt;&#xA;&lt;p&gt;4時間ほど頭をひねった結果、&#39;&lt;&#39;,&#39;&gt;&#39;の文字コードを含む漢字が化ける事に気付いた。&#34;照&#34;の&lt;span class=&#34;Software&#34;&gt;7bits-JIS&lt;/span&gt;表現&#39;&gt;H&#39;が、&#39;&amp;gt;H&#39;とサニタイズされてたわけだ。&lt;span class=&#34;Software&#34;&gt;MIME&lt;/span&gt;デコードと&lt;span class=&#34;Software&#34;&gt;UTF-8&lt;/span&gt;変換を済ませてからサニタイズするよう &lt;span class=&#34;Path&#34;&gt;common_lib.pl&lt;/span&gt; の header_analysis を改修した。&#xA;&lt;blockquote class=&#34;Log&#34;&gt;sub header_analysis{&lt;br/&gt;&#xA;        my $header = $_[0];&lt;br/&gt;&#xA;        my %header_hash;&lt;br/&gt;&#xA;        my $i;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;        my @tmp_array = split(/\r\n([^\:^\s]+)\s*:/, $header);&lt;br/&gt;&#xA;        shift(@tmp_array);&lt;br/&gt;&#xA;        for($i=0; $i&lt;$#tmp_array; $i=$i+2){&lt;br/&gt;&#xA;                $key = $tmp_array[$i];&lt;br/&gt;&#xA;                $value = $tmp_array[($i+1)];&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;                $key = uc($key);&lt;br/&gt;&#xA;                &amp;Jcode::convert(\$value, &#34;euc&#34;);&lt;br/&gt;&#xA;&lt;span class=&#34;Highlight&#34;&gt;# bug fix 2006/03/10&lt;br/&gt;&#xA;#               $value = deltag($value);&lt;br/&gt;&lt;/span&gt;&#xA;                $value =~ s/^\s*//;       # 先頭のスペースを削除&lt;br/&gt;&#xA;                $value =~ s/\r\n /\r\n/g; # スペースは改行の後のもののみ削除&lt;br/&gt;&#xA;                $value =~ s/\r\n//g; $value =~ s/\t//g;&lt;br/&gt;&#xA;#               &amp;Jcode::convert(\$value, $charset);&lt;br/&gt;&#xA;#               $value = &amp;mimedecode($value, $charset2);&lt;br/&gt;&#xA;                $value = &amp;mimedecode($value);&lt;br/&gt;&#xA;                &amp;Jcode::convert(\$value, $charset);&lt;br/&gt;&#xA;&lt;span class=&#34;Highlight&#34;&gt;# bug fix 2006/03/10&lt;br/&gt;&#xA;                $value = deltag($value);&lt;br/&gt;&lt;/span&gt;&#xA;&lt;br/&gt;&#xA;                if(($key eq &#39;TO&#39; || $key eq &#39;CC&#39; || $key eq &#39;REPLY-TO&#39;) &amp;&amp; exists($header_hash{$key})){&lt;br/&gt;&#xA;                        $header_hash{$key} .= &#34;, $value&#34;;&lt;br/&gt;&#xA;                }else{&lt;br/&gt;&#xA;                        $header_hash{$key} = $value;&lt;br/&gt;&#xA;                }&lt;br/&gt;&#xA;        }&lt;br/&gt;&#xA;        if(!exists($header_hash{&#39;FROM&#39;})){ $header_hash{&#39;FROM&#39;} = &#39;(Fromなし)&#39;; }&lt;br/&gt;&#xA;        if(!exists($header_hash{&#39;SUBJECT&#39;})){ $header_hash{&#39;SUBJECT&#39;} = &#39;(Subjectなし)&#39;; }&lt;br/&gt;&#xA;        if($header_hash{&#39;SUBJECT&#39;} eq &#39;&#39;){ $header_hash{&#39;SUBJECT&#39;} = &#39;(空文字列のSubject)&#39;; }&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;        return %header_hash;&lt;br/&gt;&#xA;}&lt;/blockquote&gt;&#xA;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
