- ベストアンサー
文字数を図り、改行したい
- 文字数を図って、改行する方法について質問しています。
- ファイルのデータをメールで受け取る際に、コメントの長さによって改行がされてしまい、メール本文が見づらくなる問題が発生しています。
- 質問者は文字数を図る方法や改行する場合の条件を知りたいとしています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば、 $line="日本語とEnglish sentenceの混ざった長い長い文章"; $n=10; の時、プログラムを実行すると 日本語とEn glish sent enceの混ざ った長い長 い文章 のように表示されます。 それを踏まえて >(1) for($i=0;$i<mb_strlen($line);$i+=$len) > の、$lenとは何を定義しているんでしょうか? 下の方ででてくる >$len=mb_strlen($wk); で出力する一行分の文字数を$lenに取ってあります。 >$wk=mb_substr($line,$i,$j); で使う$iは、取り出す文字の起点で $i+=$len とすることで、次の取り出す文字の起点をセットします。 >(2) if文なのですが、if(条件式)break;} >というのがエラーになるようなのですが、良く分かりません。 すみません、ウチではエラーになりません、エラーになる原因はよくわかりません。 エラーになるソースをあげて下さい。 このif文でやっていることは、 strlen($wk)>=$n 指定された文字数(半角)より出力する$wkが長くなった時点で出力するということをやってます。 >(3) forを2回書かないといけない理由(?)のようなものが うまくやればfor1回でいいのかもしれませんが、 $nの長さの文字列を、全角の文字列の半分から取り出したりしないように、 こわごわ長さを変えていって試してるって感じですかね^^
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>文字数ってどうやって図るのでしょうか? strlenで文字数がとれます。 全角文字混じりの文字数は、 mb_strlenか mb_strwidthを使って取れます。 一行のデータが$lineに入っている時 $nで指定したバイト数(幅数)で折り返す処理のサンプル ----------------------------------------------------- $n=72; 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"; }
お礼
回答どうもありがとうございます。 お礼が遅くなっており、申し訳ありません。 補足に書き込めないため、こちらにて追記させて 下さい。 いろいろと上記の件をためして見たのですが、上手く行きません。 素人のため、サンプルでよく分からないところがあるのですが、 (1) for($i=0;$i<mb_strlen($line);$i+=$len) の、$lenとは何を定義しているんでしょうか? (2) if文なのですが、if(条件式)break;} というのがエラーになるようなのですが、良く分かりません。 最初のforで、文字数を図って、0以上あるなら、 繰り返しているのかな???と思うのですが、 (3) forを2回書かないといけない理由(?)のようなものが 考えてみたり、試してみても素人なのでよく分かりませんでした。 こちらに関して、もう少し補足いただけたら嬉しく思います。 よろしくお願いいたします。
補足
早速のご回答ありがとうございます! お礼が遅れているのですが、 上手くいかない為、もう少しお時間を下さい・・・。
お礼
お礼が大変遅くなりました。 (決して忘れていたわけではありませんので、ご容赦下さい。。。) いろいろとありましたが、こちらを完成させることが出来ました!! if文なのですが、記述の問題で上手く行っていなかったようです。 if(条件式){break;}というように 記載していたのですが、そうではないということですね。 forに関しても、ご丁寧に解説いただき、理解することが出来ました。 >$nの長さの文字列を、全角の文字列の半分から取り出したりしないように、 >こわごわ長さを変えていって試してる こちらを理解するのに、少々時間がかかりましたが、 マルチバイトに関しても、いろいろ調べて少しずつ分かってきたように思います。 本当にありがとうございます!! ようやく、長い戦いから抜けられました。。