2012年5月10日木曜日

php mb_substr でマルチバイト文字を抽出するときの注意事項

みなさん春眠暁を覚えておりますか?職場が移転したため、これまでよりも2時間近く起床時間が早くなり、寝不足気味のかんりにんです。
先日公開した ファイル共有 PHP ソフトウェア fileBeetle で、作成中にちょっと詰まったことがあったので、覚書として載せておきます。

php で文字列の一部を取り出すには mb_substr を使用しますが、エンコーディングが utf-8 だと、1文字のバイト数が文字によって可変だからか、うまく抽出できないことが多いです。そういう時はエンコードを指定してやるとうまく動作します。

mb_substr
PHP Manual より(http://www.php.net/manual/ja/function.mb-strcut.php)
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
str
部分文字列を取り出したい文字列。

start
str の中から最初に取り出す文字の位置。

length
str の中から取り出す最大文字数。

encoding
encoding パラメータには文字エンコーディングを指定します。省略した場合は、 内部文字エンコーディングを使用します。

返り値 mb_substr() は、start および length パラメータで指定した str の一部を返します。
サンプル
$hoge = "これはテストです。";
$hogehoge = mb_substr($hoge, 3, 3, 'utf-8');
print $hogehoge;

実行結果
テスト

0 件のコメント :

コメントを投稿