[リストへもどる]
一括表示
タイトルiPhone絵文字がうまく表示できない
記事No1009
投稿日: 2013/08/09(Fri) 21:40:45
投稿者よっしー
掲示板も見させていただいてますが、初心者のため理解が
まだ出来ていないので申し訳ありません。
現在のシステムではライブラリ等は使用せず手動で1つ1つ絵文字を
対応させて登録や表示をさせている状況です(このコードはこの絵文字といったかたちで)。
そこでやはりHTML_Emojiの利用を試しているところですが、解決に至っておらず
ご相談です。

○環境
PHP:SJIS
DB:EUC (Oracle)
参照端末:ガラケーやPCやスマホ(あとアプリも予定(UTF8))

PHPやDB環境を変更するのは困難で、現行に合わせるしかありません。

1点解決出来ず悩んでいる問題がiPhone絵文字が含まれるパターンです。
基本、
$tmp = mb_convert_encoding($tmp , "eucJP-win", "SJIS-win") ;
という処理で
入力されたデータをSJISからEUCにエンコードしDBへ登録させ
それを表示させる場合にはその逆へ変換
という処理を行っておりますが、
iPhoneの絵文字入りにすると基本処理のままだと正常表示結果までうまく
たどり着けない状況です。
スマホで見ると、「&#128077」といった表示になってしまいます。
完全に対応とまでいかなくても、対策はありますでしょうか。

タイトルRe: iPhone絵文字がうまく表示できない
記事No1010
投稿日: 2013/08/10(Sat) 04:24:15
投稿者revulo
EUC-JP の文字エンコーディングは、基本的に絵文字に対応していません。
その処理だと KDDI, Softbank のガラケーから絵文字が入力された場合、
EUC-JP に変換した時点で絵文字が壊れるのではないかと思うのですが、
きちんと表示できていますか?

http://tech.dclog.jp/2012/03/decolog.html によると、
フォーム画面の HTML が Shift_JIS の場合、
iPhone の絵文字は 👍 のような数値文字参照の形で送られてくるらしいです。
これを HTML_Emoji で何とかしようとするのでしたら、
DB にはこの形で保存しておいて、表示時には、

$tmp = mb_convert_encoding($tmp, 'UTF-8', 'eucJP-win');
require_once 'HTML/Emoji.php';
$emoji = HTML_Emoji::getInstance();
$emoji->utf8 = false;
$tmp = $emoji->filter($tmp, 'DecToUtf8');
$tmp = $emoji->filter($tmp, 'Output');

のように、

・EUC-JP → UTF-8 に変換
・数値文字参照の絵文字 → UTF-8 の絵文字への変換
・UTF-8 の絵文字のキャリア変換
・UTF-8 → Shift_JIS に変換

という処理が必要になると思います。

タイトルRe^2: iPhone絵文字がうまく表示できない
記事No1011
投稿日: 2013/08/10(Sat) 12:24:32
投稿者よっしー
お忙しいところ本当に有難うございます。
なるほど、わかりやすい説明理解できました。
私のほうの説明で不足しておりましたが、
現行DB(EUC)へ登録の際は、いったんオリジナルの絵文字用コードを準備し
それに置き換えて登録するようにしております。
そしてDB読み込む際、オリジナルコードを再度置き換えるという方法です。
それだと文字が壊れる事はないのですが、1つずつ変換対応する必要があるため
非常に手間がかかります。
入力:「おはよう&#xE057」→PHP:(絵文字オリジナル変換処理)→DB登録:「おはよう[CODE00001]」といったようなかたちです。
そこで、iPhone絵文字の登場で悩んでおりました。
ありがとうございます。参考にさせていただき、徐々にHTML_Emojiへの
移行をしていきたいと思います。

タイトルRe^2: iPhone絵文字がうまく表示できない
記事No1012
投稿日: 2013/08/10(Sat) 21:03:38
投稿者よっしー
ご教授頂いてから以降、試行錯誤しながら
利用したところ、
(当オリジナルコードの対応変換も組み合わせて)
iPhoneの絵文字をDBへそのまま登録、iPhoneで絵文字表示させることができました!ありがとうございます。
ただし、iPhone絵文字を他の端末(Android)で見ると絵文字は表示されますが、ここからはやはり独自の対応になるのでしょうか。
ですが、解決も近いため感謝しております。