phpのsubstr関数の使い方や日本語の文字化けの対処法、文字数の指定方法などの解説
今回は、phpのsubstrについて学んだので、備忘録としてまとめていきます。
phpのsbustr関数の基本
substr
関数は、指定した文字列の一部分だけ抜き取ってくれる関数となる。
例えば、substr
には以下のような使い方がある。
<?php
$str = 'I am tarou';
$sub = substr($str, 2);
print $sub . PHP_EOL; // am tarou
上記の様にsubstr($str, 2)
と指定してあげることで、指定した文字列の2byte目の文字から後の文字列を取り出してくれる。
substr
は下記の様に、第3引数も指定してあげることで「2byte目から6byte目までの部分文字列を取り出す」と言うこともできる。
<?php
$str = 'I am tarou';
$sub = substr($str, 2, 6);
また、引数の整数をマイナスにすることで「後ろから何byte目」と言う感じで指定できるし、第2,3引数を文字列にしても型変換をしてくれるので普通に動く。
ただ直接引数に整数を指定してあげるケースは稀で、個人的には文字列の長さを取得するstrlen
関数と組み合わせて使う事が多い。
substrで日本語が文字化けしてしまう原因と対策
substr
関数で日本語の部分文字列を取り出そうとすると、以下の様に文字化けが発生する時がある。
<?php
$str = '私はたろうです';
$sub = substr($str, 2);
print $sub . PHP_EOL; // 私はたろうです
これはsubstr
がbyte数によって文字を分ける関数であるのが原因で起こるものだ。
ローマ字だと1byteで1文字を表現することができるが、日本語は2byteや3byteで文字を表現する「マルチバイト文字」なので、上記の例の様に3byteで表現された「私」と言う文字があるのにも関わらず2byte目から取り出そうとしているので、文字化けが発生してしまう。
対策法
対策法としては、mb_substr
を使うのが良い。この関数は、マルチバイトに対応してsubstr
と考えてよい。