スポンサーリンク

PHPで文字列の長さを測るのに、strlen()やmb_strlen()を利用します。

ASCIIのデータだけ扱っているうちは、特に問題ありませんが、
ほかの文字コード、たとえば、UTF-8などのマルチバイトを扱う場合は注意が必要になってきます。

たとえば、「あ」は、UTF-8でバイト数的には、3ですが、文字数でいえば、1です。


"あ"をstrlen()に渡した場合、文字コードに依存せずに、長さを測定するので、3が返ります。
mb_strlenの場合はどうでしょうか?

mb_strlen()のプロトタイプは下記のとおりです。

int mb_strlen ( string $str [, string $encoding ] )


strlenと同様に、文字列の長さを取得します。

第2引数のencodingは文字の円コーディングを指定します。
省略した場合は、内部文字エンコーディングが使用されます。

テストコード

<?
echo mb_internal_encoding(), PHP_EOL;

function test($msg){
	echo 'mb_strlen : '. mb_strlen($msg), PHP_EOL;
	echo 'mb_strlen utf-8: '. mb_strlen($msg, 'utf-8'), PHP_EOL;
	echo 'strlen: '. strlen($msg), PHP_EOL;
}


$msg = 'あ';
test ('あ');
test ('あい');
?>

実行結果
ISO-8859-1
mb_strlen : 3
mb_strlen utf-8: 1
strlen: 3
mb_strlen : 6
mb_strlen utf-8: 2
strlen: 6

内部エンコーディングが、 ISO-8859-1 であったため、mb_strlen()に
エンコーディングの指示をせずに、utf-8の文字列を渡すと、
結果的にバイト数が返ってきています。

PHPの設定によって、内部エンコーディングの扱いが変わります。
php.ini などで mbstring.internal_encoding を設定可能です。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー