iモード絵文字をUnicode形式からSJIS形式に逆変換するPHPサンプル
Tweet
昨日ご紹介した「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で記述してください。
実行例:
関連:
最近の記事