[PHP-users 31468] au の絵文字を変換

phpmyjob @ yahoo.co.jp phpmyjob @ yahoo.co.jp
2007年 2月 15日 (木) 15:21:32 JST


auの絵文字を変換する際、以下のように文字をチェックするオーソドックスなや
り方
なのですが、なぜか以下の問題が発生します。
   
  ・ハートマークを送ると$char1(1バイト目)にEE、$char2(2バイト目)に82が入
る(通常だとF7B2) 参照:ttp://www.au.kddi.com/ezfactory/tec/spec/pdf/typeD.pdf
  表示はSJISで内部はEUC-JPになります。
   
  スクリプトは以下です。
   
  $str = unpack("C*", $_POST["text"]); 
$c = count($str); 
for($i = 1;$i <= $c;$i++){ 
  $char1 = $str[$i]; 
  $char2 = $str[$i + 1]; 
  if((($char1 == 0xF3 || $char1 == 0xF6 || $char1 == 0xF7) && (($char2 >=

0x40 && $char2 <= 0x7E) || ($char2 >= 0x80 && $char2 <= 0xFC))) || 
   ($char1 == 0xF4 && (($char2 >= 0x40 && $char2 <= 0x7E) || ($char2 >= 
0x80 && $char2 <= 0x8D)))){ 
    $d = strval(dechex($char1)).strval(dechex($char2)); 
    $buf .= "?".strtoupper($d).";"; 
    $i++; 
  }else if(($char1 >= 0x81 && $char1 <= 0x9F) || ($char1 >= 0xE0 && 
$char1 <= 0xFC)){ 
    $buf .= pack("C*", $char1, $char2); 
    $i++; 
  }else{ 
    $buf .= pack("C", $char1); 
  } 
  return $buf;
}
   
  通常のようにF7B2の形で受け取りたいのです。
  ご教示お願い致します。


--------------------------------------
Start Yahoo! Auction now! Check out the cool campaign
http://pr.mail.yahoo.co.jp/auction/



PHP-users メーリングリストの案内