1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

strlen関数とmb_stlen関数について

Posted at

今日からPHP学び始めたので初歩的な内容ですがまとめたいと思います。

strlen関数とは

これはrubyでいうところのstring#lengthメソッドと同じです。

構文はこうです。

strlen ( string $string ) : int


引数の( string $string )には文字列が入り: intは返り値となってます。

例えばこうです。

strlen('abc') => 3

ただ日本語の場合は違う返り値になります。
例えば、、、

$text = 'あいうえお'

strlen($text) => 15

なぜ。。。

原因としては日本語のマルチバイトはsjis, utf-8だからです。(現在はほとんどがutf-8みたいです。)

###マルチバイトとは

1バイトで表現できない(2バイト以上で表現する)データのことみたいです。。。


バイトってなんだ。。

###バイトとは

調べたところ、バイトとは、情報量の単位で、8ビットと等しい情報量のことを指すようです。

ビットってなんだ...

###ビットとは

 パソコンの内部でデータを扱う最小単位。
文字や数字などのデータは2進数で扱おり2進数の1桁をビットと呼び、これがデータを扱うときの最小単位になります。
2進数とは0か1で数を表すことを指しますね。

これらをまとめると1バイト(8ビット)は8ビットでは00000000から11111111までの256通りの数を扱えることを指します。

つまり日本語の文字はパターンが漢字もあるし256通りで表現できないということになり、1バイト以上になることがわかります。

そんな1バイトで表現できない(=2バイト以上で表現する)文字を「マルチバイト文字」と呼んだりします。


話がだいぶ逸れましたが

$text = 'あいうえお'

strlen($text) => 15

こうなったのはひらがなの文字列は3バイトだからということでしょう。

もし日本語の文字列の正確な数を取得したい場合はマルチバイトに対応しているマルチバイト文字列関数を使いましょう。

$text = 'あいうえお'

mb_strlen($text) => 5


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?