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

Changeset 9771


Ignore:
Timestamp:
Dec 29, 2008, 5:46:42 PM (14 years ago)
Author:
ebihara
Message:

#2890:added ability to input Emoji from mobile-phone

Location:
OpenPNE3/trunk/lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE3/trunk/lib/filter/sfMobileIOFilter.class.php

    r8785 r9771  
    1717  public function execute($filterChain)
    1818  {
     19    $this->convertEmojiForInput();
    1920    $this->convertEncodingForInput();
    2021
     
    5657  }
    5758
     59  private function convertEmojiForInput()
     60  {
     61    $request = $this->getContext()->getRequest();
     62    $parameter_holder = $request->getParameterHolder();
     63
     64    foreach ($parameter_holder->getAll() as $key => $value) {
     65      $parameter_holder->set($key, $this->convertEmojiForInputCallback($value));
     66    }
     67  }
     68
     69  private function convertEmojiForInputCallback($value)
     70  {
     71    if (is_array($value))
     72    {
     73      return array_map(array($this, 'convertEmojiForInputCallback'), $value);
     74    }
     75
     76    $result = '';
     77
     78    for ($i = 0; $i < strlen($value); $i++)
     79    {
     80      $emoji = '';
     81      $c1 = ord($value[$i]);
     82      if ($this->getContext()->getRequest()->getMobile()->isSoftBank())
     83      {
     84        if ($c1 == 0xF7 || $c1 == 0xF9 || $c1 == 0xFB)
     85        {
     86          $bin = substr($value, $i, 2);
     87          $emoji = OpenPNE_KtaiEmoji::convertSoftBankEmojiToOpenPNEFormat($bin);
     88        }
     89      }
     90      elseif ($c1 == 0xF8 || $c1 == 0xF9)
     91      {
     92        $bin = substr($value, $i, 2);
     93        $emoji = OpenPNE_KtaiEmoji::convertDoCoMoEmojiToOpenPNEFormat($bin);
     94      }
     95      elseif (0xF3 <= $c1 && $c1 <= 0xF7)
     96      {
     97        $bin = substr($value, $i, 2);
     98        $emoji = OpenPNE_KtaiEmoji::convertEZWebEmojiToOpenPNEFormat($bin);
     99      }
     100      if ($emoji)
     101      {
     102        $result .= $emoji;
     103        $i++;
     104      }
     105      else
     106      {
     107        $result .= $value[$i];
     108        if ((0x81 <= $c1 && $c1 <= 0x9F) || 0xE0 <= $c1)
     109        {
     110          $result .= $value[$i+1];
     111          $i++;
     112        }
     113      }
     114    }
     115
     116    return $result;
     117  }
     118
    58119  /**
    59120   * Converts character encoding for output.
  • OpenPNE3/trunk/lib/vendor/OpenPNE2/KtaiEmoji.php

    r9770 r9771  
    29162916    }
    29172917  }
     2918
     2919  protected static function convertDoCoMoEmojiToOpenPNEFormat($bin)
     2920  {
     2921    $iemoji = '\xF8[\x9F-\xFC]|\xF9[\x40-\xFC]';
     2922    if (preg_match('/'.$iemoji.'/', $bin))
     2923    {
     2924      $unicode = mb_convert_encoding($bin, 'UCS2', 'SJIS-win');
     2925      $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     2926      $code = $emoji_code->get_emoji_code4emoji(sprintf('&#x%02X%02X;', ord($unicode[0]), ord($unicode[1])), 'i');
     2927      return '['.$code.']';
     2928    }
     2929    return '';
     2930  }
     2931
     2932  protected static function convertEZwebEmojiToOpenPNEFormat($bin)
     2933  {
     2934    $sjis = (ord($bin[0]) << 8) + ord($bin[1]);
     2935    if ($sjis >= 0xF340 && $sjis <= 0xF493)
     2936    {
     2937      if ($sjis <= 0xF352)
     2938      {
     2939        $unicode = $sjis - 3443;
     2940      }
     2941      elseif ($sjis <= 0xF37E)
     2942      {
     2943        $unicode = $sjis - 2259;
     2944      }
     2945      elseif ($sjis <= 0xF3CE)
     2946      {
     2947        $unicode = $sjis - 2260;
     2948      }
     2949      elseif ($sjis <= 0xF3FC)
     2950      {
     2951        $unicode = $sjis - 2241;
     2952      }
     2953      elseif ($sjis <= 0xF47E)
     2954      {
     2955        $unicode = $sjis - 2308;
     2956      }
     2957      else
     2958      {
     2959        $unicode = $sjis - 2309;
     2960      }
     2961    }
     2962    elseif ($sjis >= 0xF640 && $sjis <= 0xF7FC)
     2963    {
     2964      if ($sjis <= 0xF67E)
     2965      {
     2966        $unicode = $sjis - 4568;
     2967      }
     2968      elseif ($sjis <= 0xF6FC)
     2969      {
     2970        $unicode = $sjis - 4569;
     2971      }
     2972      elseif ($sjis <= 0xF77E)
     2973      {
     2974        $unicode = $sjis - 4636;
     2975      }
     2976      elseif ($sjis <= 0xF7D1)
     2977      {
     2978        $unicode = $sjis - 4637;
     2979      }
     2980      elseif ($sjis <= 0xF7E4)
     2981      {
     2982        $unicode = $sjis - 3287;
     2983      }
     2984      else
     2985      {
     2986        $unicode = $sjis - 4656;
     2987      }
     2988    }
     2989    else
     2990    {
     2991      return '';
     2992    }
     2993    $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     2994    $code = $emoji_code->get_emoji_code4emoji(sprintf('&#x%04X;', $unicode), 'e');
     2995    return '['.$code.']';
     2996  }
     2997
     2998  protected static function convertSoftBankEmojiToOpenPNEFormat($bin)
     2999  {
     3000    $sjis1 = ord($bin[0]);
     3001    $sjis2 = ord($bin[1]);
     3002    $web1 = $web2 = 0;
     3003    switch ($sjis1)
     3004    {
     3005      case 0xF9:
     3006        if ($sjis2 >= 0x41 && $sjis2 <= 0x7E)
     3007        {
     3008          $web1 = ord('G');
     3009          $web2 = $sjis2 - 0x20;
     3010        }
     3011        elseif ($sjis2 >= 0x80 && $sjis2 <= 0x9B)
     3012        {
     3013          $web1 = ord('G');
     3014          $web2 = $sjis2 - 0x21;
     3015        }
     3016        elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xED)
     3017        {
     3018          $web1 = ord('O');
     3019          $web2 = $sjis2 - 0x80;
     3020        }
     3021        break;
     3022      case 0xF7:
     3023        if ($sjis2 >= 0x41 && $sjis2 <= 0x7E)
     3024        {
     3025          $web1 = ord('E');
     3026          $web2 = $sjis2 - 0x20;
     3027        }
     3028        elseif ($sjis2 >= 0x80 && $sjis2 <= 0x9B)
     3029        {
     3030          $web1 = ord('E');
     3031          $web2 = $sjis2 - 0x21;
     3032        }
     3033        elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xF3)
     3034        {
     3035          $web1 = ord('F');
     3036          $web2 = $sjis2 - 0x80;
     3037        }
     3038        break;
     3039      case 0xFB:
     3040        if ($sjis2 >= 0x41 && $sjis2 <= 0x7E)
     3041        {
     3042          $web1 = ord('P');
     3043          $web2 = $sjis2 - 0x20;
     3044        }
     3045        elseif ($sjis2 >= 0x80 && $sjis2 <= 0x8D)
     3046        {
     3047          $web1 = ord('P');
     3048          $web2 = $sjis2 - 0x21;
     3049        }
     3050        elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xD7)
     3051        {
     3052          $web1 = ord('Q');
     3053          $web2 = $sjis2 - 0x80;
     3054        }
     3055        break;
     3056      default:
     3057        return '';
     3058    }
     3059    $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     3060    $code = $emoji_code->get_emoji_code4emoji(pack('c5', 0x1b, 0x24, $web1, $web2, 0x0f), 's');
     3061    return '['.$code.']';
     3062  }
    29183063}
    29193064
Note: See TracChangeset for help on using the changeset viewer.