携帯サイトでの絵文字対応BBSの作成で絵文字の変換に困っています。
PHPとMySQLを使って絵文字対応の携帯サイト用BBSを構築しています。データベースに登録した絵文字付のコメントを取得すると、絵文字部分がうまく表示されずに困っています。
現在、携帯サイト用の絵文字対応BBSを作成しています。フォームから絵文字付のコメントを入力して、それをDBに登録、または登録されている絵文字付コメントをDBから取得するというものです。
DBに登録する際に入力した絵文字を「<emoji=1,,,>」のような形に変換してeucJP-winでDBに登録します。
出力する際には「<emoji=1,,>」を対応する絵文字に変換(事前に変換表を作成しました。)して画面に出力します。
その際、直接ソースに記述した<emoji=1,,>は対応する絵文字に変換されて表示されるのですが、DBから取得した絵文字付コメント(例:こんにちは<emoji=1,,>)は対応する絵文字に変換されない状態になっており困っています。
ob_start();
:
:
<?php
$mysql=new MySQL;
$sql="SELECT no,title,imp FROM s001osirase ORDER BY no DESC LIMIT 0,3";
$mysql->query($sql);
while($row=$mysql->fetch()){
$no=$row['no'];
$title=$row['title'];
$title=mb_convert_encoding($title,'SJIS-win',mb_internal_encoding());
$imp=$row['imp'];
if($imp=="yimp"){
echo '<div style="color:#FF0000;font-size:xx-small;">[重要</div>';
echo '<div style="font-size:xx-small;"><a href="/mobile/s001/bbs/bbs_show.php?no='.$no.'">'.$title.'</a></div>';
}else{
echo '<div style="color:#FF0000;font-size:xx-small;">[普通]</div>';
echo '<div style="font-size:xx-small;"><a href="/mobile/s001/bbs/bbs_show.php?no='.$no.'">'.$title.'</a></div>';
}
}
?>
:
//内部文字コード(eucJP-win)をSJIS-winに変換する関数
outpue_encode();
//<emoji=1,,,>部分を絵文字に変換してバッファを出力する関数
emoji_output();
emoji_output関数は以下のとおりです。
function emoji_output(){
$output_str=ob_get_contents();
ob_end_clean();
header('Content-Type: application/xhtml+xml;');
$output_str=preg_replace_callback('/<emoji=([0-9,]+)>/','emoji_output_changea',$output_str);
echo $output_str;
}
コールバック関数emoji_output_changeaで$output_str内の<emoji=1,,,>を絵文字に変換しています。
ob_start()を使ってバッファにためて、emoji_outputで<emoji=1,,>を一括でpreg_replace_call関数を使って絵文字に変換して出力しています。この関数は問題なく動いていると思います。
DBから取得した記事が格納された変数$titleのみ変換されていないように思います。
考えられる原因がお分かりの方、いらっしゃいましたらよろしくお願いします。
わかりづらい文章で申し訳ありません。
お礼
アドバイスいただいた回避策で無事正常に表示させることができました。 ご親切に教えてくださり本当にありがとうございました。