• ベストアンサー

日本語(マルチバイト)でのwordwrap処理

簡易メーラーのようなものを作っており、返信の際に改行と”>”が入る処理をしたいと思っています。 しかし、wordwrapを使って分割しようとすると、文字列の途中に半角文字が奇数個入っている場合、その後の文字が化けてしまいます。 mb_splitという関数がありますが、これはまだ実験段階ということなので、今の時点での利用は避けたいと思っています。他のマルチバイト関数を一通り見てみましたが、mb_split以外にwordwrapのような機能は無いように見えました。 どのようにすれば日本語で自動改行処理ができますでしょうか。ご教授下さい。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#末尾を(なるべく)揃えるバージョン #$line は、一行分のデータが文字列で入っている $n=10; # 改行させる(半角での)文字数 for($i=0;$i<mb_strlen($line);$i+=$len){ for($j=1;$j<=$n;$j++){ $wk=mb_substr($line,$i,$j); if(strlen($wk)>=$n) break; } $len=mb_strlen($wk); print ">$wk\n"; }

dokumori
質問者

お礼

ありがとうございます!大変助かりました。 やっぱり一つの関数でさっくり処理するわけには行かないんですね。

その他の回答 (3)

回答No.4

単純に行頭に">"を挿入するのであればNo3さんのような処理でいいと思います。 ただ、「実験的なステータス」だからmb_splitを使わないというのであれば、マルチバイト関係の関数は全部コレなので、あまり気にしなくていいと思いますよ。phpの場合、実験的なステータスじゃなくてもバージョンアップの時に挙動が変わる事があるので(^^;あまり気にせず、使える関数ならバンバン使ってます。

dokumori
質問者

お礼

>実験的なステータスじゃなくてもバージョンアップの時に挙動が変わる事があるので 知りませんでした。おっそろしいですね。;´∀` うーん、今後、mb系はあまり積極的に使わないようにします。 有用な情報ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1デス >を忘れてました。 print ">" . mb_substr($line,$i,$n) . "\n";

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

#$line : 一行分の入力 #$n : 改行させる文字数 for($i=0;$i<mb_strlen($line);$i+=$n){ print mb_substr($line,$i,$n) . "\n"; } みたいな感じでどうでしょう。 後ろがそろわないからダメかな・

関連するQ&A