private function convertEmojiForInputCallback($value) { if (is_array($value)) { return array_map(array($this, 'convertEmojiForInputCallback'), $value); } $result = ''; for ($i = 0; $i < strlen($value); $i++) { $emoji = ''; $c1 = ord($value[$i]); if ($this->getContext()->getRequest()->getMobile()->isSoftBank()) { if ($c1 == 0xf7 || $c1 == 0xf9 || $c1 == 0xfb) { $bin = substr($value, $i, 2); $emoji = OpenPNE_KtaiEmoji::convertSoftBankEmojiToOpenPNEFormat($bin); } } elseif ($c1 == 0xf8 || $c1 == 0xf9) { $bin = substr($value, $i, 2); $emoji = OpenPNE_KtaiEmoji::convertDoCoMoEmojiToOpenPNEFormat($bin); } elseif (0xf3 <= $c1 && $c1 <= 0xf7) { $bin = substr($value, $i, 2); $emoji = OpenPNE_KtaiEmoji::convertEZWebEmojiToOpenPNEFormat($bin); } if ($emoji) { $result .= $emoji; $i++; } else { $result .= $value[$i]; if (0x81 <= $c1 && $c1 <= 0x9f || 0xe0 <= $c1) { $result .= $value[$i + 1]; $i++; } } } return $result; }
protected function convertSoftBankEmoji($matches) { $unicode = mb_convert_encoding($matches[0], 'UCS2', 'UTF-8'); $unicode = array(ord($unicode[0]), ord($unicode[1])); $bias = array(0x19, 0x40); switch ($unicode[0]) { case 0xe1: $bias[0] = 0x16; break; case 0xe2: $bias[0] = 0x15; $bias[1] = 0xa0; break; case 0xe3: case 0xe5: $bias[0] = 0x16; $bias[1] = 0xa0; break; case 0xe4: $bias[0] = 0x17; break; } if ($bias[1] == 0x40) { if ($unicode[1] >= 0x40) { $bias[1]++; } } return OpenPNE_KtaiEmoji::convertSoftBankEmojiToOpenPNEFormat(pack('C*', $unicode[0] + $bias[0], $unicode[1] + $bias[1])); }