PHPで文字列を操作する(1)

こんばんは。きわさです。

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

となりました。

マルチバイト文字、やっかいです。

スポンサーリンク