注目の書籍

好評発売中!

IT業界徹底研究就職ガイド2013年版

IT/ネット業界で働くと いうことを分かりやす く解説。2013年3月卒 業の学生向けの1冊。

必聴講座ご紹介

Cloud Days Tokyo 2012
クラウド時代を勝ち抜く企業戦略を考える

エムオーテックス


Cloud Days Tokyo 2012
クラウド時代の企業インフラとユーザー環境の姿

ヴイエムウェア


Cloud Days Osaka 2012
クラウドでIT維新を〜ビジネスを加速させるベストプラクティス

アマゾン データ サービス ジャパン

オープンソース/Linux

PHP TIPS

ITpro

21. mb_strlen()関数の落とし穴

2007/03/27

mb_strlen()関数は、日本語などのマルチバイト文字列の文字数をカウントする関数ですが、気をつけて使わないと思わぬバグの原因になってしまうことがあります。

<?php
$str 
'日本語にほんご';
var_dump(mb_strlen($str));
?>

このスクリプトを実行すると、多くの場合は


int(7)

と、正しい結果が表示されますが、環境によっては
int(12)やint(9)など、変な値が表示されてしまう場合があります。

これは、PHPの内部エンコーディングが文字列のエンコードと異なっている時に
起こります。

<?php
$str 
'日本語にほんご';
var_dump(mb_strlen($str'SJIS'));
?>

というように、mb_strlen()関数の第2引数に$strの文字エンコードを指定す
ると、PHPの内部エンコーディング設定に関わらず正しく動作するようになります。
環境が変わったら突然おかしくなったということを防ぐためにも、第2引数で文
字エンコードを指定するようにすることをお勧めします。
mb_strlen()関数だけでなく、mb_strwidth()関数など、マルチバイト文字列関数
はオプションの引数で文字エンコードを指定できるものが多いので気をつけてくだ
さい。

このように、PHPの関数には引数がオプションとなっているものでも、指定しない
と動作がおかしくなる場合があったり、指定すると大変便利に使えたりする関数が
いろいろあります。
マニュアルをいつもより少し詳しく見てみるだけでも、新たな発見があるかもし
れません。

mb_strlen: http://www.phppro.jp/phpmanual/php/function.mb-strlen.html



(アシアル 牧野克俊)



この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。

同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介