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

iemoji_encode

created: 2004-02-23 18:25 | modified: 2004-02-25 00:43 | reply: 1

[1319] iemoji_encode

user: 幻彩時 | created: 2004-02-23 18:25
iemoji_encode使わせてもらっています。
ただ、掲載されているものはいくつか不具合があったので訂正して使わせていただいています。
周知のことかもしれませんが、訂正したもを張らせていた代来ます。
//**************************************************
// function iemoji_encode ( $str, $opt = true )
//**************************************************
// 機 能:i-mode基本絵文字を10進数SJIS表記に、
// 拡張絵文字を16進数Unicode表記に変換する。
// 引 数:$str = i-mode絵文字を含む文字列
// $opt = falseを指定すると絵文字を削除する。
// 戻り値:変換(削除)後の文字列
//**************************************************
function iemoji_encode ( $str, $opt = true )
{
$str = unpack("C*", $str);
$len = count($str);
$buff = "";
$n = 1;

while($n <= $len) {
$ch1 = $str[$n];
$ch2 = $str[$n+1];
if((($ch1 == 0xF8) && (0x9F <= $ch2) && ($ch2 <= 0xFC)) ||
(($ch1 == 0xF9) &&
((0x40 <= $ch2) && ($ch2 <= 0x49) ||
(0x50 <= $ch2) && ($ch2 <= 0x52) ||
(0x55 <= $ch2) && ($ch2 <= 0x57) ||
(0x5B <= $ch2) && ($ch2 <= 0x5E) ||
(0x72 <= $ch2) && ($ch2 <= 0x7E) ||
(0x80 <= $ch2) && ($ch2 <= 0xB0)))) {
if($opt)
$buff .= '&#'.strval(($ch1 << 8) + $ch2).';';
$n++;
}
elseif(($ch1 == 0xF9) && (0xB1 <= $ch2) && ($ch2 <= 0xFC)) {
if($opt)
$buff .= '&#x'.strtoupper(dechex(0xE700 + $ch2 - 165)).';';
$n++;
}
elseif((($ch1 >= 0x81) && ($ch1 <= 0x9f) )|| (($ch1 >= 0xe0) && ($ch1 <= 0xfc))){
$buff .= pack("C", $str[$n]) . pack("C", $str[++$n]);//2byte文字を処理
}
else
$buff .= pack("C", $str[$n]);
$n++;
}

return $buff;
}
reply: 1327 返信 編集 削除

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

user: ゆうじ | created: 2004-02-25 00:43
お返事遅くなりました。
なんで2バイト文字に不都合があるのか悩んでました。

2バイト文字の2バイト目とその次の1バイトが、
別の文字と判別されしまってたのですね。

気づいておりませんでした。
お知らせ頂きありがとうございました。
のちほど訂正させていただきます。
Parent: 1319  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 674 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

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