スレッド表示 | フラット表示〕 全トピック 920 件中 757 番目 次≫ ≪前

jemoji_encodeに絵文字を複数送ると

created: 2003-11-07 16:21 | modified: 2003-11-07 23:24 | reply: 8

[909] jemoji_encodeに絵文字を複数送ると

user: 美智子 | created: 2003-11-07 16:21
はじめまして、美智子といいます。

こちらのJ-PHONEの絵文字をエンティティに変換するツールをありがたくつかわさせていただいています。

jemoji_encodeに1つ不具合が見つかりました、下記のようなデータをこの関数にとおすと
うまくいきませんでした。何故でしょうか?
ちなみに絵文字+全角文字+絵文字のみのデータを入力した場合はうまくいきました。

うまくいかなかった例

絵文字絵文字

うまくいった例

絵文字テスト絵文字

*:絵文字はJ-PHONEの絵文字を意味します。
reply: 910 返信 編集 削除

[910] どのように変換されたのでしょう。

user: ゆうじ | created: 2003-11-07 16:36
単独の絵文字は変換され、
連続した絵文字はうまくいかなかったということですね。

うまくいかなかったこの絵文字は、
同じ絵文字が連続した場合でしょうか、
それとも異なる絵文字が続いた場合でしょうか。
または、両方ともうまくいきませんでしたか。
あと、どのように変換されたのか、

申し訳ありませんが、お知らせいただけますか。
宜しくお願い致します。
Parent: 909  reply: 912 913 返信 編集 削除

[912] 連続時の結果です

user: 美智子 | created: 2003-11-07 17:35
J-PHONEの端末から下記のような組み合わせで
試した結果です。

男の子はUnicode(E001)
女の子はUnicode(E002)
です。

男の子単独の結果

$#27;$G!

男の子連続の結果

$#27;$G!!

女の子単独の結果

$#27;$G"

女の子連続の結果

$#27;$G""

男の子女の子の結果

$#27;$G!"

女の子男の子の結果

$#27;$G"!
Parent: 910  返信 編集 削除

[913] テストに使ったスクリプト

user: 美智子 | created: 2003-11-07 18:22
テストのに使ったスクリプトは下記のようになります。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<form action="jtest.php" method="post">
<input type=text name=test>
<input type="submit" value="ON">
</form>

<?

$_POST['test'] = (isset($_POST['test'])) ? $_POST['test']: "";

// 絵文字変換
$_POST['test'] = jemoji_encode($_POST['test'],true);

echo $_POST['test'];
exit;

function jemoji_encode ( $str, $opt = true )
{
$str = preg_split("/\x1B[\x24]([\x21-\x7A]{2,})\x0F/", $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$line = count($str);
$buff = "";
$n = 0;

while($n < $line) {
if($n % 2) {
if($opt)
$buff .= '&#27;$'.$str[$n].'&#15;';
}
else
$buff .= $str[$n];
$n++;
}

return $buff;
}

?>

</body>
</body>
Parent: 910  reply: 915 返信 編集 削除

[915] 仕様の解釈を間違っていました。

user: ゆうじ | created: 2003-11-07 19:07
早速、結果とテストスクリプトまで
挙げていただいてありがとうございます。

同じ絵文字の連続はOKですが
異なる絵文字が連続した場合が意図してない結果です。
(以下$記号を&に訂正しました。)

男の子連続の結果

&#27;$G!!&#15; ○

女の子連続の結果

&#27;$G""&#15; ○

男の子女の子の結果

&#27;$G!"&#15; ×

女の子男の子の結果

&#27;$G"!&#15; ×


この結果をお知らせいただいたお陰でわかったのですが、
私が、j-sky絵文字の仕様を間違って解釈していました。
申し訳ありません。

同じ絵文字が連続した場合、
4バイト目(男の子なら!)が連続する数だけ続くわけですが、
異なる絵文字でも、3バイト目が同じなら、それも短縮されるようです。

仕様の解釈がまちがっていたのですが、
結果的に、jemoji_encode 関数は、正しい動作をしています。
(×をつけたものも○が正解です。)


反対に、jemoji_decode は正しく動作しません。
早速訂正させていただきます。

訂正が済みましたらまた掲示板にご報告させていただきます。
ご丁寧にお知らせ頂きありがとうございます。
Parent: 913  reply: 917 返信 編集 削除

[917] もう1つ質問

user: 美智子 | created: 2003-11-07 21:02
圧縮という仕様がJ-PHONEの場合は盛り込まれているんですね^^;。かなり厄介ですね。

もう1つ教えて欲しいんですが、今下記の方法を使ってI-MODEの絵文字の入力から出力
までを変換して取り扱っているんですが、J-PHONEの場合はI-MODEのコードと違って
複雑なので<--------1の部分をどのように書いたらいいのでしょうか?


こちらの環境
PHP4.2.3
SMARTY Ver1.5
出力SJIS
内部コードEUC-JP
スクリプト、テンプレートはすべてEUC-JPで書かれている
mbstringのinputはpass指定で、他は設定していない

入力から出力までのI-MODEでの絵文字処理の流れ

1.POST入力された絵文字データを最初にiemoji_encodeを使ってコードに変換してmb_convert_encoding
を使いSJISからEUC-JPに変換,addslashesにてエスケープ
2.データベース(EUCJP)に保存
3.絵文字コードを含む文字列をDBから取り出して,stripslashes,htmlspecialchars(ENT_NOQUTES)の順
に処理させる
4.ブラウザーに送るHTMLデータをバッファーに送る
5.下記の関数にバッファを渡して絵文字データをデコードして出力

function output_emoji($source)
{
$source = ereg_replace("&amp;(#[0-9]{5})","&\\1",$source);<--------1
$source = mb_convert_encoding($source,"SJIS-win","EUC-JP");
$source = iemoji_decode($source);

echo $tpl_source;
}
Parent: 915  reply: 918 919 返信 編集 削除

[918] 素朴な疑問

user: 美智子 | created: 2003-11-07 21:29
J-PHONEの絵文字も10進のUNICODE形式(&#XXXXX;)に変換することはできない
のでしょうか?もしこのUNICODE形式に変換できればI-MODEの時ど同様に
処理ができそうなので。
Parent: 917  返信 編集 削除

[919] 絵文字コードのままでOK

user: ゆうじ | created: 2003-11-07 22:47
解説ページのほう訂正しました。
ありがとうございました。ホント厄介ですね。

J-SKY絵文字の場合は、
文字コードを変更しても、絵文字コードは保持されますので
そのまま SJIS→EUC とエンコードしても大丈夫です。

ただ、データベースで、
制御コード(\x1Bと\x0F)が、影響するのか、しないものなのか。
これがわからないのですが、
DBが影響を受ける場合のみ、imode同様、最初に jemoji_encode で変換し、
表示の際に jemoji_decode を使って戻していただければと思います。


表記方法はどのような手法を使っても良いと思いますよ。
ある程度汎用性を持たせる為に、
うちでは最小限の変換だけを行う仕様にしてるだけですので。
Parent: 917  reply: 920 返信 編集 削除

[920] ありがとうございました

user: 美智子 | created: 2003-11-07 23:24
どうにもコード系は私は弱くて、16進数を
見るだけで拒否反応がw
とっても助かりました!ありがとうございました。

とりあえず、制御コードが影響するかしないか
様子を見てみます。もし問題があれば表記法を
I-MODE同様にできるか試行錯誤してみます^^。
Parent: 919  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 757 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑