ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 4867


Ignore:
Timestamp:
Dec 27, 2007, 10:03:20 PM (12 years ago)
Author:
ebihara
Message:

#1711:mb_substitute_characterを使わない形に修正

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/trunk/webapp/lib/OpenPNE/KtaiMail.php

    r4864 r4867  
    306306    function convert_text_core($str)
    307307    {
    308         $converted_text = "";
    309         $res = preg_split("/JIS\+..../", $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
    310 
    311         for ($i = 0; $i < count($res); $i++) {
    312             if ($i == 0) {
    313                 $begin = strlen($res[$i][0]);
    314                 $converted_text .= $res[$i][0];
    315             } else {
    316                 $jis = substr($str, $begin, 8);
    317 
    318                 // $jisを変換
    319                 $a = "0x" . substr($jis, 4, 2);
    320                 $b = "0x" . substr($jis, 6, 2);
    321 
    322                 // http://www.slayers.ne.jp/~oouchi/code/jistosjis.html
    323                 $a = intval($a, 16);
    324                 $b = intval($b, 16);
    325                 if ($a % 2 == 1) {
    326                     $b += 0x1f;
    327                 } else {
    328                     $b += 0x7d;
    329                 }
    330 
    331                 if ($b >= 0x7f) {
    332                     $b++;
    333                 }
    334 
    335                 $a = floor(($a-0x21) / 2) + 0x81;
    336 
    337                 if ($a >= 0x9e) {
    338                     $a+=0x40;
    339                 }
    340 
    341                 $c = $a * 16 * 16 + $b;
    342                 if ($c >= 0xEDCF || ($c >= 0xED40 && $c <= 0xEDCE)) {
    343                     $c += 1536;
    344                 } else {
    345                     $c += 2816;
    346                 }
    347 
    348                 // 絵文字変換
     308        $result = "";
     309
     310        for ($i = 0; $i < strlen($str); $i++) {
     311            $c = 0;
     312            $c1 = ord($str[$i]);
     313            $c2 = ord($str[$i]);
     314
     315            // E-mail用絵文字から携帯用絵文字に変換
     316            if ($c1 == 0xED || $c1 ==0xEE) {  // [e:358] ~ [e:499]、[e:700]~
     317                $c = hexdec(bin2hex(substr($str, $i, 2))) + 1536;
     318            } elseif ($c1 == 0xEB || $c1 == 0xEC) {  // [e:1]~[e:357]、[e:500]~[e:518]
     319                $c = hexdec(bin2hex(substr($str, $i, 2))) + 2816;
     320            }
     321
     322            if ($c) {
     323                $bin = array();
    349324                $bin[0] = chr($c >> 8);
    350325                $bin[1] = chr($c - ($bin[0] << 8));
    351326                $emoji = emoji_escape_e($bin);
    352 
    353                 $converted_text .= $emoji;
    354 
    355                 //Eメール送出用Shift-JIS(E-SJIS)と携帯用Shift-JISコード(K-SJIS)には以下の関係がある
    356                 // * 358 <= 絵文字番号 <= 499, 700 <= 絵文字番号
    357                 // hexdec(K-SJIS) = hexdec(E-SJIS) + 1536
    358                 // * それ以外の絵文字
    359                 // hexdec(K-SJIS) = hexdec(E-SJIS) + 2816
    360                 $begin = strlen($res[$i][0]) + $res[$i][1];
    361                 $converted_text .= $res[$i][0];
    362             }
    363         }
    364         return $converted_text;
     327                $result .= $emoji;
     328                $i++;
     329            } else {
     330                $result .= $str[$i];
     331                if ((0x81 <= $c1 && $c1 <= 0x9F) || 0xE0 <= $c1) {
     332                    $result .= $str[$i+1];
     333                    $i++;
     334                }
     335            }
     336        }
     337
     338        return $result;
    365339    }
    366340 
     
    387361        $domain = array_pop($from_addr);
    388362
    389         if ($domain == 'ezweb.ne.jp') {
    390             mb_substitute_character("long");
    391             $str = mb_convert_encoding($str, $to_encoding, $from_encoding);
     363        if ($domain == 'ezweb.ne.jp') {  // auは絵文字変換もおこなう
     364            // 絵文字変換をするため、いったんShift_JISに変換
     365            $str = mb_convert_encoding($str, 'SJIS-win', $from_encoding);
     366
     367            // 絵文字変換
    392368            $str = $this->convert_text_core($str);
     369
     370            // 文字エンコーディング変換
     371            $str = mb_convert_encoding($str, $to_encoding, 'SJIS-win');
    393372        } else {
    394373            $str = mb_convert_encoding($str, $to_encoding, $from_encoding);
Note: See TracChangeset for help on using the changeset viewer.