* @license http://www.opensource.org/licenses/mit-license.php The MIT License
* @link http://php-develop.org/MobilePictogramConverter/
*/
class MPC_EZweb extends MPC_Common
{
/**
* 絵文字抽出正規表現
* @var string
*/
var $regex = array(
'WEB' => '//ie',
'IMG' => '/()/ie',
);
/**
* 文字列からEZweb絵文字を検出し、指定されたフォーマットに変換
* 基本・拡張・隠し絵文字対応
*
* @param string $to (MPC_TO_FOMA, MPC_TO_EZWEB, MPC_TO_SOFTBANK)
* @param integer $option (MPC_TO_OPTION_RAW, MPC_TO_OPTION_WEB, MPC_TO_OPTION_IMG)
* @return string
*/
function Convert($to, $option = MPC_TO_OPTION_RAW)
{
if (isset($toCharset)) {
$this->setToCharset($toCharset);
}
$this->setTo($to);
$this->setOption($option);
$str = $this->getString();
$type = $this->getStringType();
$fromCharset = $this->getFromCharset();
// RAWへ変換
if ($type != MPC_FROM_OPTION_RAW) {
if (empty($this->e2icon_table)) {
require 'map/e2icon_table.php';
}
$regex = str_replace('{PATH}', preg_quote(rtrim($this->getEZwebImagePath(), '/'), '/'), $this->getRegex($type));
$eval = ($fromCharset == MPC_FROM_CHARSET_UTF8) ? 'mb_convert_encoding(pack("H*", dechex(\$this->e2icon_table[$2] - 1792)), "UTF-8", "unicode")' : 'pack("H*", dechex(\$this->e2icon_table[$2]))';
$str = preg_replace($regex, $eval, $str);
}
$this->setDS(unpack('C*', $str));
$c = count($this->decstring);
for ($this->i = 1;$this->i <= $c;$this->i++) {
$result = $this->Inspection();
if (is_null($result)) {
continue;
}
// 絵文字変換処理
if ($this->isPictogram($result)) {
$hex = ($fromCharset == MPC_FROM_CHARSET_UTF8) ? strtoupper(dechex(hexdec(bin2hex(mb_convert_encoding(pack('H*', $this->decs2hex($result)), 'unicode', 'utf-8'))) + 1792)) : $this->decs2hex($result);
if (empty($this->e2icon_table)) {
require 'map/e2icon_table.php';
}
list($iconno) = array_keys($this->e2icon_table, hexdec($hex));
$this->setPictogram($this->encoder($iconno));
} else {
$this->setUnPictogram(pack('H*', $this->decs2hex($result)));
}
}
// ここで文字コードの変換とかやる予定
$buf = $this->getUnPictograms() + $this->getPictograms();
$this->ReleaseUnPictograms();
$this->ReleasePictograms();
if (is_array($buf)) {
ksort($buf);
return implode('', $buf);
} else {
return null;
}
}
/**
* 文字列からEZweb絵文字を除外する
*
* @return string
*/
function Except()
{
$str = $this->getString();
$type = $this->getStringType();
$charset = $this->getFromCharset();
if ($type != MPC_FROM_OPTION_RAW) {
if (empty($this->e2icon_table)) {
require 'map/e2icon_table.php';
}
$regex = str_replace('{PATH}', preg_quote(rtrim($this->getEZwebImagePath(), '/'), '/'), $this->getRegex($type));
return preg_replace($regex, '', $str);
}
$this->setDS(unpack('C*', $str));
$c = count($this->decstring);
for ($this->i = 1;$this->i <= $c;$this->i++) {
$result = $this->Inspection();
if (is_null($result)) {
continue;
}
if ($this->isPictogram($result) == false) {
$this->setUnPictogram(pack('H*', $this->decs2hex($result)));
}
}
$buf = $this->getUnPictograms();
$this->ReleaseUnPictograms();
if (is_array($buf)) {
return implode('', $buf);
} else {
return null;
}
}
/**
* 文字列にEZweb絵文字が何個含まれているかチェック
*
* @return integer
*/
function Count()
{
$count = 0;
$str = $this->getString();
$type = $this->getStringType();
$charset = $this->getFromCharset();
if ($type != MPC_FROM_OPTION_RAW) {
if (empty($this->e2icon_table)) {
require 'map/e2icon_table.php';
}
$regex = str_replace('{PATH}', preg_quote(rtrim($this->getEZwebImagePath(), '/'), '/'), $this->getRegex($type));
return preg_replace($regex, '', $str);
}
$this->setDS(unpack('C*', $str));
$c = count($this->decstring);
for ($this->i = 1;$this->i <= $c;$this->i++) {
$result = $this->Inspection();
if (is_null($result)) {
continue;
}
if ($this->isPictogram($result) == true) {
$count++;
}
}
$this->ReleaseUnPictograms();
return $count;
}
/**
* バイナリがEZweb絵文字かどうか、チェック
*
* @param array $chars
* @return boolean
*/
function isPictogram($chars)
{
if ($this->getFromCharset() == MPC_FROM_CHARSET_UTF8) {
list($char1, $char2, $char3) = $chars;
if (
($char1 == 0xEE &&
(
($char2 == 0xB1 && ($char3 >= 0x80 && $char3 <= 0xBE)) ||
($char2 == 0xB2 && ($char3 >= 0x80 && $char3 <= 0xBF)) ||
($char2 == 0xB3 && ($char3 >= 0x80 && $char3 <= 0xBC)) ||
($char2 == 0xB5 && ($char3 >= 0x80 && $char3 <= 0xBE)) ||
($char2 == 0xB6 && ($char3 >= 0x80 && $char3 <= 0x8D)) ||
($char2 == 0xBD && ($char3 >= 0x80 && $char3 <= 0xBE)) ||
($char2 == 0xBE && ($char3 >= 0x80 && $char3 <= 0xBF)) ||
($char2 == 0xBF && ($char3 >= 0x80 && $char3 <= 0xBC))
)
) ||
($char1 == 0xEF &&
(
($char2 == 0x81 && ($char3 >= 0x80 && $char3 <= 0xBE)) ||
($char2 == 0x82 && ($char3 >= 0x80 && $char3 <= 0xBF)) ||
($char2 == 0x83 && ($char3 >= 0x80 && $char3 <= 0xBC))
)
)
) {
$boolean = true;
} else {
$boolean = false;
}
} else {
list($char1, $char2) = $chars;
if ((($char1 == 0xF3 || $char1 == 0xF6 || $char1 == 0xF7) && (($char2 >= 0x40 && $char2 <= 0x7E) || ($char2 >= 0x80 && $char2 <= 0xFC))) || ($char1 == 0xF4 && (($char2 >= 0x40 && $char2 <= 0x7E) || ($char2 >= 0x80 && $char2 <= 0x8D)))) {
$boolean = true;
} else {
$boolean = false;
}
}
return $boolean;
}
}
// }}}
?>