2010年3月6日土曜日

phpのワードラップ(wordwrap)処理。
UTF-8しか試してない。
標準の関数がマルチバイトに対応していないからこんなことに。
ネットのQAなんかで紹介されている関数だとUTF8は動作しなかったりして駄目だった・・・。
3バイトで全角文字を表現するからこんなことになるんだぁぁぁぁ。

wordwrap
function _wordwrap($line,$length=-1,$cr="\n",$enc="UTF-8"){
if($length<=1 && $length!=-1){
throw new Exception("wrapの指定が1以下");
}elseif($length==-1){
return $line;
}
$tmpBody = $line;
$vars = array();
$byteAlp=strlen("A");
$byteKan=strlen("漢");
$S = $byteKan-$byteAlp;

for($i=0; $i $n = $length; //文字数なので最大byteKan倍の半角文字数文を取得してしまう。
$wk = mb_substr($tmpBody, $i, $n,$enc);
while(1){
$K = (strlen($wk)-mb_strlen($wk,$enc))/$S;
$H = $K*2+(strlen($wk)-($K*$byteKan));
if($H<=$length){
$wkf = $wk;
break;
} else {
$n--;
}
$wk = mb_substr($tmpBody, $i, $n,$enc);
}
$vars[] = $wkf;
}
return implode($cr,$vars);
}

0 件のコメント:

コメントを投稿