iモード絵文字をUnicode形式からSJIS形式に逆変換するPHPサンプル
    このエントリをはてなブックマークに登録

昨日ご紹介した「iモード絵文字をSJIS形式からUnicode形式に変換するPHPサンプル」に続き、Unicode形式からSJIS形式への逆変換のサンプルPHPをご紹介します。

このような変換を施すことで、バイト数を削減できますし、i絵文字などがインストールされているPCでは絵文字を表示できるため、管理画面などでの利用に便利です。

 

$str = '絵文字コードを含む文字列';

// iモード拡張絵文字(Unicode形式)を検索
$pattern = '/&#x(E6[3-F][0-9A-F]|E7[0-5][0-9A-F]);/';
preg_match_all($pattern, $str, $arr); // $arr[0]に対象絵文字が格納される

// 絵文字に置換
$rep_arr = array();
foreach($arr[0] as $value) {
	$hex = substr($value, 3, 4);
	$dec = hexdec($hex);
	if (58942 <= $dec AND $dec <= 59035) {
		// 絵文字No.1 ~ No.94
		$dec = $dec + 4705;
	} elseif (59099 <= $dec AND $dec <= 59223) {
		// 絵文字No.118 ~ No.166、拡1~拡76
		$dec = $dec + 4773;
	} elseif ((59036 <= $dec AND $dec <= 59045) OR
		(59052 <= $dec AND $dec <= 59054) OR
		(59057 <= $dec AND $dec <= 59059) OR
		(59063 <= $dec AND $dec <= 59066) OR
		(59086 <= $dec AND $dec <= 59098)) {
		// 絵文字No.95 ~ No.117、No.167 ~ No.176
		$dec = $dec + 4772;
	} else {
		continue;
	}
	$rep_arr[$value] = pack('n', $dec);
}

// 置換処理
$str = strtr($str, $rep_arr);

// 出力
echo $str;

※ソースはSJISで記述してください。

実行例:
iemoji_conv2.gif

 

関連:


 

最近の記事







コメントを書く