utf8で3キャリア対応サイトを作成する際に、auの絵文字が小さくならない件の対応 (php emoji utf8
cakePHP + smarty + 絵文字表示 - 雑想空間 これの続き、っちゃー続き。
auの絵文字を表示させる方法は何種類かあるんですが、imgタグで表示させると、fontタグやspanタグのstyleでサイズ指定しても、連動して小さくなってくれません。
au絵文字を大きくする、小さくする - [au [KDDI EZweb]/携帯] ぺんたん info
こちらにも書いてあるように、
 
このように書けばokですが、
<img localsrc="51" />
imgタグで指定すると、サイズが固定されて、変動しません。
cake php + smarty
cake php と smarty を利用してサイトを作成した時に、
Smarty で携帯絵文字 - ZeBeVogue別館
こちらの関数にお世話になったのですが、
case "e"; if (preg_match("/[^0-9]/", $emoji_array[$data][2])) { $put = $emoji_array[$data][2]; } else { $put = "<img localsrc=\"".$emoji_array[$data][2]."\" />"; } break;
基本的には、imgタグで表示するので、文字サイズとともにサイズ変更してくれません。
webコード(SJIS)で書き直そうと思い、規則性やマッピングについて久々に探したら、2007年にすでに解決してました。
KDDI/AUでutf-8のHTMLフォームから送られてくる絵文字コード - Bulknews::Subtech - subtech
EZweb (au) 絵文字の規則性 - 覇王色を求めて
utf-8のサイトでformから送信された場合の対処法をまとめてありますが、普通にwebコード(SJIS)からエンコードしなおす場合にも利用できそうです。
<?php // eebd89 echo bin2hex(mb_convert_encoding(pack('H*', dechex(hexdec("F649") - 1792)), 'UTF-8', 'unicode')); ?>
ちょっと書き換え
まず絵文字のマッピング表に、新たに、auのwebコード(SJIS)を追加します
表は
絵文字を使いこなして見るためのページ【Docomo】全ページ
こちらから拝借
1,,44,Gj,F660 2,,107,Gi,F665 3,,95,Gk,F664 4,,191,Gh,F65D
末尾に追加してみました。
コードもちょっと変えます
23 // au の絵文字表示形式 24 $au_conv = 1; // 0 default 1 size依存 25 26 //携帯UA取得 27 $agent = $_SERVER["HTTP_USER_AGENT"]; 28 if(preg_match("/[0-9]{1,3}/", $data) && is_numeric($data) && 0 < $data && $data < 253) { 29 switch (mobile($agent)) { 30 case "i"; 31 $put = $emoji_array[$data][1]; 32 break; 33 case "e"; 34 if ($au_conv == 1) { 35 if (preg_match("/^[A-F0-9]+$/", $emoji_array[$data][4])) { 36 $put = mb_convert_encoding(pack('H*', dechex(hexdec($emoji_array[$data][4]) - 1792)), 'UTF-8', 'unicode'); 37 } 38 else { 39 $put = $emoji_array[$data][4]; 40 } 41 } 42 elseif (preg_match("/[^0-9]/", $emoji_array[$data][2])) { 43 $put = $emoji_array[$data][2]; 44 } else { 45 $put = "<img localsrc=\"".$emoji_array[$data][2]."\" />"; 46 } 47 break; 48 case "s"; 49 if (preg_match("/^[A-Z]{1}?/", $emoji_array[$data][3])) { 50 $put = "\x1B\$".encode($emoji_array[$data][3])."\x0F"; 51 } else { 52 $put = encode($emoji_array[$data][3]); 53 } 54 break; 55 case "p"; 56 $put = "<img src=\""."/img/mobile/".$emoji_array[$data][0].".gif\" width=\"12\" height=\"12\" border=\"0\" alt=\"\" />"; 57 break; 58 }
これで
{emoji num=1}
で、絵文字表示できて、文字サイズに依存する絵文字が出ました