• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列の先頭から指定バイトだけ取得)

文字列の先頭から指定バイトだけ取得する方法

このQ&Aのポイント
  • 質問文章から、指定したバイト数だけ文字列の先頭を取得する方法についてご質問があります。
  • 現在、1バイト文字と2バイト文字が混在した文字列を指定バイト数で切り取る関数を作成しようとしていますが、うまくいかないようです。
  • mb_substr関数では、2バイト文字の途中を指定すると文字化けしてしまいます。この問題を回避する方法はあるのでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>何かうまい回避方法はないでしょうか? 補足が必要です。 「ああ」と表示したいのですか? 「あああ」と表示したいのですか? 「ああx」(xに任意の文字を指定)としたいのですか?

gogo724275
質問者

補足

失礼しました。 以下のように訂正させていただきます。 $str1 = "あああaあいいいいいい"; $str2 ="aaaaaaaaaabbbbbbbbbbb"; 表示文字バイト数:10 表示結果 あああaあ aaaaaaaaaa

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なんかすごく簡単な方法があるような気がしますが、ぱっとおもいつかない ので、以下のような方法でどうでしょうか? <?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; } ?>

gogo724275
質問者

お礼

ありがとうございました。 参考にして考えてみました。 こんなのはどうでしょうか? 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; }

関連するQ&A