- ベストアンサー
文字列を一定文字数で挿入もしくは、改行する方法は?
- 文字列を一定文字数で改行する方法を知りたいです。具体的には、8文字ずつ改行したいです。
- 最初は、mb_substrで改行する文字を調べて改行タグを入れる方法を考えていましたが、同じ文字を入力された場合に変な位置で改行されてしまう問題が発生しました。
- データが常に変わるため、フォーム入力を想定しています。最悪の場合、PHPで処理することも検討していますが、可能でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
全角8文字で改行する 1番目と3番目は半角文字などが混ざっていると使えない 2番目又は4番目は、エンコードに依存する(php.iniにも)ので注意。 <?php $data="あめんぼ、赤いなあいうえお"; $result=chunk_split($data,8*2); print $result; ?> <?php #mbstring.internal_encoding = SJIS $data="あめんぼ、赤いなあいうえお"; $result=mb_ereg_replace("(.{1,8})","\\1\r\n",$data); print $result; ?> <?php $data="あめんぼ、赤いなあいうえお"; $result=preg_replace("/(.{1,16})/","$1\r\n",$data); print $result; ?> <?php $data="あめんぼ、赤いなあいうえお"; $size=8; $result=""; for($i=0;$i<=mb_strlen($data,"sjis")/$size;$i++){ $result.=mb_substr($data,$i*$size,$size,"sjis")."\r\n"; } print $result; ?>
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>半角をチェックするか、つぶすのを視野に入れています。 だったら、chunk_splitが一番、当初の目的通りのものですよね。 >1番目は、 >$result=chunk_split($data,16,"<br>"); 改行と言うより、<br>を挿入したいのでしたら、その通りです。
お礼
お礼とポイントがまだでした。 半角の完全なつぶし方&チェックに、ちと苦労しま したが、ここで聞かずに解決できました。 ありがとうございます。
お礼
1番目は、 $result=chunk_split($data,16,"<br>"); でいいんですよね。 マルチバイトしか見てなかったのがあだとなりました。ささすが、PHPご都合的な関数が用意されているとは。 半角をチェックするか、つぶすのを視野に入れています。 でも、抽出して元に戻す時に、付け加えれば、 いいんですね。文字の長さの分ループして。 $result.=mb_substr($data,$i*8,8,"EUC-JP")."<br>"; こういう瞬発的なアイディアに行き当たらないのが、 頭の固さなのかな~。 ありがとうございました。