mb_strlenやmb_strimwidthの注意点

日本語を含む文字列を扱う関数 mb_strlen、mb_substr、mb_strcut、mb_strimwidth などは、文字列のエンコードを指定しないと正しく文字数をカウントできません。
文字エンコードを指定するには、引数に文字エンコード名を渡すか、mb_internal_encoding()などで内部エンコードを指定します。
内部エンコードはサーバの設定によって違ったりするので、プログラムを他のサーバで使用することがある場合は、引数で渡すようにしておいたほうが安全だと思います。
引数で渡す場合も、設定ファイルなどに定数として記述しておいたほうが後々楽です。

[参考記事] 文字列の一部を得る関数mb_substrとmb_strcutの違い
[参考記事] マルチバイト文字列(日本語文字)を一文字づつ取り出す

<?php
$str="テストですよ。";

var_dump( mb_strlen($str) );

$str=mb_convert_encoding($str,"UTF-8","SJIS");

var_dump( mb_strlen($str) );
int(14)
int(21)

このように文字エンコードの指定がないと、正しく判断できません。

文字エンコードを指定すると、正しい答えが返ってきます。

<?php
$str="テストですよ。";

var_dump( mb_strlen($str,"SJIS") );

$str=mb_convert_encoding($str,"UTF-8","SJIS");

var_dump( mb_strlen($str,"UTF-8") );
int(7)
int(7)

関連記事

スポンサーリンク

基本的な特徴

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る