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

Changeset 4610


Ignore:
Timestamp:
Nov 21, 2007, 1:52:58 AM (12 years ago)
Author:
tejimaa
Message:

AU携帯絵文字拡張機能、頂いたソース機能をTRUNKに追加しました。

実機検証が必要です。

File:
1 edited

Legend:

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

    r4417 r4610  
    33 * @copyright 2005-2007 OpenPNE Project
    44 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
     5 * @author Ogawa ogawa@tejimaya.com
     6 * @author Masaki Miyshita
    57 */
    68
    79// PEAR::Mail_mimeDecode
    810require_once 'Mail/mimeDecode.php';
     11require_once 'util.inc.php';
    912
    1013/**
     
    275278        $str = str_replace('"', '', $str);
    276279
    277         // <example@docomo.ne.jp> というメールアドレスになることがある。
     280    $bkup = $str;
     281        $ar = split(',',$str);
     282    $cnt = count($ar);
     283    if( $cnt < 2 ){
     284    $str = $bkup;
     285        // <example@docomo.ne.jp> というアドレスになることがある。
    278286        //   日本語 <example@docomo.ne.jp>
    279287        // のような場合に複数マッチする可能性があるので、
     
    284292            return array_pop($matches[1]);
    285293        }
     294    } else {
     295    $regx = '/([\.\w!#$%&\'*+\-\/=?^`{|}~]+@[\w!#$%&\'*+\-\/=?^`{|}~]+(\.[\w!#$%&\'*+\-\/=?^`{|}~]+)*)/';
     296        for($i=0;$i<$cnt;$i++){
     297             $matches = array();
     298               
     299                if (preg_match_all($regx, $ar[$i], $matches)) {
     300           
     301                $to = array_pop($matches[1]);
     302                list($to_user0, $to_host0) = explode("@", $to, 2);
     303                if( $to_host0 === MAIL_SERVER_DOMAIN ) {
     304                    return $to;
     305                }
     306                }
     307        }
     308
     309
     310
     311    }
    286312
    287313        return false;
    288314    }
    289315
     316    function convert_text_core( $str )
     317    {
     318
     319      $converted_text = "";
     320      $res = preg_split("/JIS\+..../", $str, -1 ,PREG_SPLIT_OFFSET_CAPTURE) ;
     321     
     322      for($i=0;$i<count($res);$i++){
     323        if($i==0){
     324          $begin=strlen($res[$i][0]);
     325          $converted_text .= $res[$i][0];
     326        } else {
     327          $jis=substr($str,$begin,8);
     328         
     329          // $jisを変換
     330          $a = "0x".substr($jis,4,2);
     331          $b = "0x".substr($jis,6,2);
     332          {
     333            // http://www.slayers.ne.jp/~oouchi/code/jistosjis.html
     334            $a=intval($a,16);
     335            $b=intval($b,16);
     336            if($a%2==1)
     337              $b+=0x1f;
     338            else
     339              $b+=0x7d;
     340           
     341            if($b>=0x7f)
     342              $b++;
     343           
     344            $a=floor(($a-0x21)/2)+0x81;
     345           
     346            if($a>=0x9e)
     347              $a+=0x40;
     348           
     349            $c=$a*16*16+$b;
     350            if( $c >= 0xEDCF || ( $c >= 0xED40 && $c <= 0xEDCE )) $c += 1536;
     351            else $c += 2816;
     352
     353            // 絵文字変換
     354            $bin[0] = chr($c >> 8);
     355            $bin[1] = chr($c - ($bin[0] << 8));
     356            $emoji = emoji_escape_e($bin);
     357             
     358            $converted_text .= $emoji;
     359          }
     360       
     361          //Eメール送出用Shift-JIS(E-SJIS)と携帯用Shift-JISコード(K-SJIS)には以下の関係がある
     362          // * 358 <= 絵文字番号 <= 499, 700 <= 絵文字番号
     363          // hexdec(K-SJIS) = hexdec(E-SJIS) + 1536
     364          // * それ以外の絵文字
     365          // hexdec(K-SJIS) = hexdec(E-SJIS) + 2816
     366         
     367          $begin=strlen($res[$i][0])+$res[$i][1];
     368          $converted_text .= $res[$i][0];
     369        }
     370       
     371      }
     372      return $converted_text;
     373     
     374     
     375    }
     376 
    290377    /**
    291378     * 文字エンコーディングの変換、空白文字の削除
     
    302389        if (!$to_encoding)   $to_encoding = $this->to_encoding;
    303390
    304         $str = mb_convert_encoding($str, $to_encoding, $from_encoding);
     391
     392        if ( $GLOBALS['__Framework']['carrier'] != 's' ) {
     393          mb_substitute_character("long");
     394          $str = mb_convert_encoding($str, $to_encoding, $from_encoding);
     395          $str = $this->convert_text_core($str);
     396        } else {
     397          $str = mb_convert_encoding($str, $to_encoding, $from_encoding);
     398        }
    305399
    306400        // 空白文字の削除
Note: See TracChangeset for help on using the changeset viewer.