mb_strlenと改行コードの罠
PHPのmb_strlenはCR+LFを2文字(バイトではなく文字な所に注意)として認識するため、CR+LFとLFが混在するような使い方をされた場合に、思った通りにコードが動かないことがある。
下記コードを参考にして貰うと解るがCR+LFは2文字と解釈される。
これに対する簡単な対策としては事前にCR+LFをLFに置き換えてから評価するのが良いだろう。
<?php $str = "\r"; printf("LF = %s\n", mb_strlen($str)); $str = "\r\n"; printf("CR+LF = %s\n", mb_strlen($str)); $str = str_replace("\r\n", "\n", $str); printf("CR+LF -> LF = %s\n", mb_strlen($str)); ?>
実行結果はこちら
[root@host test]$ php test.php LF = 1 CR+LF = 2 CR+LF -> LF = 1
・・・しかし、他の処理系だとCR+LFは一文字としてカウントするのが普通では無かろうか?
これはちょっとばかり不親切だよな〜〜