結論からいうと、、
公式より
マルチバイト文字は、通常はシングルバイト文字の倍の幅となります。
mb_strwidth()
aの幅は1
あの幅は2
UTF8の場合
aは1byte
あは3byte
byte | 幅 | |
---|---|---|
こ | 3 | 2 |
こん | 6 | 4 |
こんにちは | 15 | 10 |
a | 1 | 1 |
abc | 3 | 3 |
abc012#$#% | 10 | 10 |
こんにちabc | 15 | 11 |
\n | 1 | 1 |
\r\n | 2 | 2 |
*byteはstrlen()、幅はmb_strwidth()で取得。
どこで問題になるのか
mb_strimwidth
気軽にこれを使おうとしてwidthの正体に悩まされて泣かされました。
ここで言う幅はbyteではなくmb_strwidth()の幅です。
これでスッキリきっかりstrimwidthできますね!
substr()とかmb_strcut()の引数$lengthはbyteです。
幅って書いてあるし、すぐ分かったやろという残念な感じになってしまいましたが。