こんばんは。きわさです。
PHPでの文字列操作についてです。
少しハマりかけたのでメモ。
strlen
さっそくですが、
1 2 3 4 5 6 | <?php $test1 = "Test文字列" ; $test2 = "テストString" ; echo "strlen($test1) : " . strlen ( $test1 ) . "<br />" ; echo "strlen($test2) : " . strlen ( $test2 ) . "<br />" ; ?> |
このようなPHPのコードがあります。
$test1と$test2にそれぞれ文字列を格納し、strlen で文字列長を取得しています。
それだけです、、それだけ、なのですが。。
てっきり、出力結果は、
strlen(Test文字列) : 7
strlen(テストString) : 9
となるものだと思っていました。
が、実際の結果は、
strlen(Test文字列) : 13
strlen(テストString) : 15
となったのです。
あれま、どういうこっちゃと思いましたが、
英字は1バイト、カタカナや漢字は3バイトで、文字列長というよりはバイト数が出力されていました。
そりゃ期待した結果と違うわけです。
mb_strlen
そして、期待した結果を出力してくれる関数は別にありました。
それが、mb_strlen です。mb_ はマルチバイト対応ってことっぽいです。
1 2 3 4 5 6 | <?php $test1 = "Test文字列" ; $test2 = "テストString" ; echo "mb_strlen($test1) : " . mb_strlen( $test1 ) . "<br />" ; echo "mb_strlen($test2) : " . mb_strlen( $test2 ) . "<br />" ; ?> |
使い方は同じで行けました。
mb_strlen(Test文字列) : 7
mb_strlen(テストString) : 9
substrとmb_substr
そして、文字列の抜き出しのsubstrですが、こちらも同様にmb_substrがありました。
1 2 3 4 5 6 7 8 | <?php $test1 = "Test文字列" ; $test2 = "テストString" ; echo "substr($test1, 4, 3) : " . substr ( $test1 , 4, 3) . "<br />" ; echo "substr($test2, 3, 6) : " . substr ( $test2 , 3, 6) . "<br />" ; echo "mb_substr($test1, 4, 3) : " . mb_substr( $test1 , 4, 3) . "<br />" ; echo "mb_substr($test2, 3, 6) : " . mb_substr( $test2 , 3, 6) . "<br />" ; ?> |
まず substr ですが、これも期待としては、
substr(Test文字列, 4, 3) : 文字列
substr(テストString, 3, 6) : String
でしたが、実際は
substr(Test文字列, 4, 3) : 文
substr(テストString, 3, 6) : スト
となりました。
そして、またまた、mb_ がついた mb_substr です。
こちらは期待通りの結果で、
mb_substr(Test文字列, 4, 3) : 文字列
mb_substr(テストString, 3, 6) : String
となりました。
マルチバイト文字、やっかいです。