【PHP】マルチバイト文字をバイト数で切り出し文字化け対応

  • LINEで送る

phpでマルチバイト文字列をバイト数で切り出す場合は、mb_strcut()を使用する。
substr()だと文字化けすることがある。
「あ」が3byteだとすると、1byte目や2byte目までで切り出した場合に文字化けする。

文字化けするパターン

例)文字コードutf8の場合

$a = 'aaあああ';
var_dump(mb_strcut($a, 0, 3)); //出力内容:aa
var_dump(mb_strcut($a, 0, 4)); //出力内容:aa
var_dump(mb_strcut($a, 0, 5)); //出力内容:aaあ

$a = 'aaあああ';
var_dump(substr($a, 0, 3)); //出力内容:aa�
var_dump(substr($a, 0, 4)); //出力内容:aa��
var_dump(substr($a, 0, 5)); //出力内容:aaあ

mb_strcutについて

(PHP 4 >= 4.0.6, PHP 5)
mb_strcut — 文字列の一部を得る

string mb_strcut ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

パラメータ
str
取り出しの対象となる文字列。
start
start が非負である場合に返される文字列は、 string の start バイト目以降の文字列となります (ゼロから数えます)。 たとえば、文字列 ‘abcdef’ の 0 バイト目は ‘a’ で、 2 バイト目は ‘c’ のようになります。

start が負の数の場合に返される文字列は、 string の後ろから数えて start バイト目以降となります。

length
バイト単位での長さ。 省略したり NULL を指定したりした場合は、 文字列の最後までの全バイトを取り出します。
encoding
encoding パラメータには文字エンコーディングを指定します。省略した場合は、 内部文字エンコーディングを使用します。
返り値
mb_strcut() は、 start および length パラメータで指定した str の一部を返します。

SNSでもご購読できます。

コメントを残す

*

CAPTCHA