twitterブログパーツその3-文字コードで苦戦


デザインは背景画像(ない場合は背景色)にして、シンプルをイメージ。まだ途中。

TwitterからXMLをパースするのはいいんだが、上図のように複数行なので文字数を一定の量で分割しなければならない。
ところが、日本語OKのはずのmb_substrなどを使っても、分割すると化け化け。UTF-8が原因らしい。
EUC-JPだと問題なく分割出来る。しかし文字を画像にするときはUTF-8に…等、まわりくどい事をしたがなんとか正しく表示させる事が出来た。
他にも、半角や改行が入っていると化けてしまうのでmb_ereg_replaceなどで半角を全て全角に変換、改行は除去とした。
つぶやき部分に関する所はこんなところかなー。

<?
//前の部分ちょっと省略
//xmlのデータはUTF-8なのでEUCに変換
$txt = mb_convert_encoding($txt, "EUC-JP","UTF-8");
//行
$gyo = array(); 

//改行除去、半角を全角に
$txt = preg_replace ("/[\t\r\n]/","",$txt);
$txt = mb_convert_kana($txt, "RNASKV","EUC-JP");
//140字以上なら切り捨て
$txt = mb_strimwidth($txt, 0, 140, "...");
//18バイトずつ配列に入れて複数行にする
$length = 18;
for ( $i=0; $i<mb_strlen($txt); $i+=$length ) {
  $gyo[] = mb_substr($txt,$i,$length);
}
//中略

//行間
$y=16;
//複数行の配列に従って文字を描いて行く
for($i=0;$i<count($gyo);$i++){
//EUC-JPをまたまたUTF-8に変換
$gyo[$i]=mb_convert_encoding($gyo[$i],"UTF-8","EUC-JP");
ImageTTFText ($image, 11, 0, 14, 9+$y*($i+1), $color, $font, $gyo[$i]);
}
//後略
?>