こんばんは。きわさです。
PHPでの文字列操作についてです。
少しハマりかけたのでメモ。
strlen
さっそくですが、
<?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_ はマルチバイト対応ってことっぽいです。
<?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がありました。
<?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
となりました。
マルチバイト文字、やっかいです。