PHPのmb_strcut関数を使えば、半角全角混合の文字列からバイト指定切り出しでも大丈夫!
やりたい事
対象文字列を、先頭から前半10バイト・後半10バイトで、切り分けたい(21バイト目以降は無視)
ただし、対象文字列は半角全角混合(1~2バイト)のSJISで、切れ目に2バイト文字があったら、後半にずらして欲しい(マルチバイトの断片化はNG)
※UTF8全盛の昨今では文字数指定が普通だけど、こういう仕様もある
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // ファイルの文字コードはShift-JISで保存する事! $target = "ABあいうえおかきくけこさしすせそ"; $byte = 10; $enc = "sjis-win"; // sjisだと一部の文字が非対応 // mb_strcutを使って、前半10バイトを切り出し $str1 = mb_strcut($target, 0 , $byte, $enc); echo $str1 ."<br>"; // 結果のバイト数を取得(10バイト目が全角なら、9バイトで切り落とされる) $len = strlen($str1); // 読み込むバイト数の指定は0始まりだから、9だと10バイト目から読み込む echo mb_strcut($target, $len , $byte, $enc); |
// 出力結果
Aあいうえ
おかきくけ
// 先頭のAを削ると
あいうえお
かきくけこ
// 先頭をABにすると
ABあいうえ
おかきくけ