dポイントプレゼントキャンペーン実施中!

質問させてください。
携帯のサイトで各種(Vodafone, au)携帯電話からBBSに感想を入力する画面を作成しました。
入力される文字列は文字、数字、絵文字があります。
入力されたデータはPostgreSQLのDBに格納しています。
その格納された文字列(絵文字含む)を各種携帯で
表示してみたところ、お互いの絵文字が問題に
なったため、変換処理を追加しました。

========================================
$msg = "********";(DBから取得した文字列(絵文字含む))
$emoji = file(emoji_file.txt);
for($r=0;$r<count($emoji);$r++){
$string = chop($emoji[$r]);
$emoji_data = split("===", $string);
if(strstr($msg, $emoji_data[0])){
echo("HIT");
$msg = eregi_replace($emoji_data[0], $emoji_data[1], $msg);
}
}
echo($msg);
======================================
emoji_file.txt
$Fr===1
$G-===281
$G.===287
======================================
上記のプログラムで、
DBから取得した文字列内にemoji_file.txt
にある絵文字データがあれば数値に変換したいと
考えていますが、"HIT"が表示されるにも
かかわらず変換されずに表示されます。
これは、"$G."などVodafoneの絵文字が
普通の文字列と違うからでしょうか?

宜しくお願い致します。

A 回答 (1件)

Vodafone の絵文字は、1文字5バイトになるのですが、


$Fr ←これは1文字だけ表示させた場合で、
複数行になると実際には、
$Fr$G-$G.$Fr という具合になります。

開始文字と終了文字が省略される、というわけですね。
replaceする時はこの辺を考慮した方がいいです。

さておき、
strstr でHitしたものをうまく置換できないのであれば
置換の際に、eregi_replaceを使っているので
eregi で検索してはどうでしょうか?

if(eregi($emoji_data[0],$msg)){
$msg = eregi_replace($emoji_data[0],$emoji_data[1],$msg);
echo "HIT";
}

これで HIT と出るのにそれでも置換されないのであれば
また悩んでみては?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!