携帯サイトでの絵文字対応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のみ変換されていないように思います。
考えられる原因がお分かりの方、いらっしゃいましたらよろしくお願いします。
わかりづらい文章で申し訳ありません。