- ベストアンサー
文字列の先頭から指定バイトだけ取得する方法
- 質問文章から、指定したバイト数だけ文字列の先頭を取得する方法についてご質問があります。
- 現在、1バイト文字と2バイト文字が混在した文字列を指定バイト数で切り取る関数を作成しようとしていますが、うまくいかないようです。
- mb_substr関数では、2バイト文字の途中を指定すると文字化けしてしまいます。この問題を回避する方法はあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>何かうまい回避方法はないでしょうか? 補足が必要です。 「ああ」と表示したいのですか? 「あああ」と表示したいのですか? 「ああx」(xに任意の文字を指定)としたいのですか?
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
なんかすごく簡単な方法があるような気がしますが、ぱっとおもいつかない ので、以下のような方法でどうでしょうか? <?PHP $str1 = "あああaあいいいいいい"; print left($str1,10)."<br>"; $str2 ="aaaaaaaaaabbbbbbbbbbb"; print left($str2,10)."<br>"; function left($str,$len){ if(strlen($str)<=$len) return $str; $str=substr($str,0,$len+1); $str=mb_substr($str,0,mb_strlen($str,"EUC-JP")-1,"EUC-JP"); return $str; } ?>
お礼
ありがとうございました。 参考にして考えてみました。 こんなのはどうでしょうか? function hoge($str, $len, $foot = '') { $x; $ret = ''; if( strlen($str) <= $len ) { return $str; } for($x = 0; $x < mb_strlen($str); $x++) { $ret.= mb_substr($str, $x, 1); if( $len <= strlen($ret) ) { break; } } $ret.= $foot; return $ret; }
補足
失礼しました。 以下のように訂正させていただきます。 $str1 = "あああaあいいいいいい"; $str2 ="aaaaaaaaaabbbbbbbbbbb"; 表示文字バイト数:10 表示結果 あああaあ aaaaaaaaaa