• ベストアンサー

全角文字の指定以内の切り取り

$text = "あいうえお"; // 全角を2バイトとするSJSIやEUC-JPの文字コードで // 5バイト切り出した時に[う」が半分に割れて文字化け起こすのを回避 // し、5バイト切りでも4バイト切りにする方法が知りたいです。 // 上の場合、 $result = "あい";となるような方法です。 // $text = "あいuえお"; の場合は $result = "あいu"; // $text = "aいうえお"; の場合は $result = "aいう";

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

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

UTFなど3バイト文字も想定した方がよいかもしれませんね。 たとえば冗長なやりかたですがこんな感じでどうでしょう? <?PHP function substr_cut($str,$num){ mb_internal_encoding("EUC-JP"); $retstr=""; for($i=1;$i<=mb_strlen($str);$i++){ $substr=mb_substr($str,$i-1,1); $count+=strlen($substr)==1?1:2; if($count>$num) break; $retstr.=$substr; } return $retstr; } $text = "あいうえお"; print substr_cut($text,5)."<br>"; $text = "あいueo"; print substr_cut($text,5)."<br>"; $text = "aいueo"; print substr_cut($text,5)."<br>"; $text = "aいうえo"; print substr_cut($text,5)."<br>"; ?>

その他の回答 (1)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

mb_convert_encodingが不完全な文字を削除する特徴を利用して 下記のようにするのが簡単です。 <? //EUC-JPの例です $text = "あいうえお"; $text= substr($text,0,5); //5文字を切り取り // 一旦、他の文字コードに替えて戻します $text = mb_convert_encoding($text, "UTF-8","EUC-JP"); $text = mb_convert_encoding($text,"EUC-JP", "UTF-8"); echo $text; ?>

関連するQ&A

専門家に質問してみよう