[PHP] substr()およびmb_substr()の挙動
スポンサーリンク
substr()
およびmb_substr()
は文字列の一部を取り出す関数です。両者とも同じ機能を持ちますが、2バイト文字を扱う場合はmb_substr()
の方を使います。
基本的な使い方
第1引数に文字列、第2引数に取り出し開始位置を指定します。1文字目は0番目となります。
$str = "hello world !!"; echo substr( $str, 3 );// lo world !!
第2引数に3を指定すると4文字目から文字列の最後までが取り出されました。
取り出し文字数の指定
第3引数に、取り出し文字数を指定することができます。
echo substr( $str, 6, 5 );// world
7文字目のwから5文字が取り出されました。
後ろから指定
第2引数の取り出し開始位置をマイナスにすると、切り取り開始位置を後ろから数えます。この場合、一番後ろの文字を-1と数えます。
echo substr( $str, -8 );// world !! echo substr( $str, -8, 5 );// world
取り出し文字数に負の数を指定した場合
第3引数に負の数を与えた場合、取り出し文字数ではなく取り出し終了位置として機能します。
echo substr( $str, 0, -3 );// hello world
-3を指定したことで、後ろから3文字目の1文字手前までが取り出されました。
取り出し開始位置が文字数をオーバー
第2引数に文字数より大きい数を与えるとfalseとなります。
$a = substr( $str, 20 ); var_dump( $a );// bool(false)
従って、取り出し開始位置が文字列の途中からとなる場合、あらかじめstrlen()
またはmb_strlen()
を使い字数を調べてから処理しなければなりません。
一方、文字数より大きな負の数を与えた場合はfalseとはならず1文字目から取り出されます。
echo substr( $str, -50 );// hello world !! echo substr( $str, -50, 5 );// hello
切り取り文字数が文字列終端を超えた場合
切り取り文字数が文字列の終端をオーバーした場合、切り取り開始位置から最後までを取り出します。
mb_substr()は第4引数にエンコーディングを指定する
mb_substr()を使う場合、第4引数にエンコーディングを指定します。省略した場合、内部エンコーディングによっては文字化けが発生するか、想定と異なる文字列が返ってくる場合があります。
$str = "あめんぼあかいなあいうえお、かきのきくりのきかきくけこ"; //エンコーディング指定なし echo mb_substr( $str, 0, 20 );// あめんぼあかい //エンコーディング指定あり echo mb_substr( $str, 0, 20, 'utf-8' );// あめんぼあかいなあいうえお、かきのきくり
スポンサーリンク