マルチバイト文字列関数

関数一覧
mb_convert_encoding() /  mb_convert_variables() /  mb_strimwidth() /  mb_strlen() /  mb_strpos() /  mb_strrpos() /  mb_strwidth() /  mb_substr() /  mb_substr_count()
機能一覧
文字エンコーディングを変換する /  指定した幅に文字列を丸める/文字列の幅を得る /  文字列の長さを得る /  文字列A内の文字列Bの有無と位置を調べる /  文字列の一部を得る /  部分文字列の出現回数を得る

文字エンコーディングを変換する

mb_convert_encoding()関数
string mb_convert_encoding(string 文字列, string 変換後エンコード[, mixed 変換前エンコード])
「文字列」の文字コードを「変換前エンコード」から「変換後エンコード」に変換する関数です。
「変換前エンコード」には、配列または“「,(カンマ)」区切りの文字列”が指定出来ます。配列を指定した場合は若い番号の要素(エンコード)から順に、“「,(カンマ)」区切りの文字列”を指定した場合は左側のエンコードから順に自動検出を行います。省略された場合のデフォルト値は、内部文字エンコーディングです。
「変換前エンコード」に「"auto"」を指定すると、「"ASCII, JIS, UTF-8, EUC-JP, SJIS"」に展開されます。

以下にサンプル。

<?php
    $str = "ほでなすPHP";
    
    $str = mb_convert_encoding($str, "SJIS");
    $str = mb_convert_encoding($str, "EUC-JP", "SJIS");
    $str = mb_convert_encoding($str, "SJIS", "EUC-JP, UTF-8");
    $str = mb_convert_encoding($str, "SJIS", "auto");
?>

PageTop


mb_convert_variables()関数
string mb_convert_variables(string 変換後エンコード, mixed 変換前エンコード, mixed 変数[, 変数2...])
「変数[, 変数2...]」の文字コードを「変換前エンコード」から「変換後エンコード」に変換する関数です。
第3引数以降の「変数N」は変換する変数へのリファレンスで、文字列、配列、オブジェクトを指定可能です。また、全て同じエンコード(「変換前エンコード」)であると仮定されます。
変換に成功すると「変換前エンコード」を返し、失敗すると「FALSE」を返します。

以下にサンプル。

<?php
    $str1 = "ほでなすPHP";
    $str2 = "プロジェクトP";
    
    $encode = mb_convert_variables("SJIS", "EUC-JP", $str1, $str2);
?>

PageTop


指定した幅に文字列を丸める/文字列の幅を得る

mb_strimwidth()関数
string mb_strimwidth(string 文字列, int 開始位置, int 幅, string 埋め合わせ文字列[, string エンコード])
「文字列」を「開始位置」からの「幅」に丸め、後尾に「埋め合わせ文字列」を追加した文字列を返す関数です。なお、「幅」は「埋め合わせ文字列」を含めた値です。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
注:「幅」は字数ではなく、バイト数です。文字コードが異なれば「幅」は変わります。PHPファイルのエンコードを変えると違った結果になります。

以下にサンプル。

<?php
    $str = "寝ても覚めてもほでなすPHP";
    
    echo mb_strimwidth($str, 0, 12, "...");
    
    /*出力結果
    寝ても...
    */
?>

PageTop


mb_strwidth()関数
int mb_strwidth(string 文字列[, string エンコード])
「文字列」の“幅”を返す関数です。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
注:“幅”は字数ではなく、バイト数です。文字コードが異なれば“幅”は変わります。PHPファイルのエンコードを変えると違った結果になります。

以下にサンプル。

<?php
    $str = "寝ても覚めてもほでなすPHP";
    
    echo mb_strwidth($str);
    
    /*出力結果
    25
    */
?>

PageTop


文字列の長さを得る

mb_strlen()関数
int mb_strlen(string 文字列[, string エンコード])
「文字列」の長さ(字数)を返します。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
この関数は「strlen()」関数のマルチバイト文字対応版です。

以下にサンプル。

<?php
    $str = "寝ても覚めてもほでなすPHP";
    
    echo mb_strlen($str);
    
    /*出力結果
    14
    */
?>

PageTop


文字列A内の文字列Bの有無と位置を調べる

mb_strpos()関数
int mb_strpos(string 文字列, string 部分文字列[, int 開始位置[, string エンコード]])
「文字列」内で、「部分文字列」が最初に現れる位置を返す関数です。
「部分文字列」が存在しない場合は「FALSE」を返します。
「開始位置」を指定すると、それ以降に存在するかを調べます。その場合でも、返される値は「文字列」の先頭からの絶対位置になります。
「開始位置」に、指定した「文字列」の字数を超える値を指定するとエラー(「E_WARNING」)を発します。
「部分文字列」が存在するか否かを調べたい場合、この関数が返す値が「0」の場合もあるため、「===演算子」を使って「if(mb_strpos($str, $part) === FALSE){処理}」のように書くか、「is_numeric()」関数を使用して「if(is_numeric(mb_strpos($str, $part))){処理}」と書く必要があります。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
この関数は「strpos()」関数のマルチバイト文字対応版です。

以下にサンプル。

<?php
    $str = "寝ても覚めてもほでなすPHP";
    $part = "も";
    
    echo mb_strpos($str, $part), "<br />";
    echo mb_strpos($str, $part, 3), "<br />";
    if( mb_strpos($str, "あ") === false ){
        echo "not exists<br />";
    }
    if( is_numeric( mb_strpos($str, "寝") ) ){
        echo "exists";
    }
    
    /*出力結果
    2
    6
    not exists
    exists
    */
?>

PageTop


mb_strrpos()関数
int mb_strrpos(string 文字列, char 部分文字) [PHP4]
int mb_strrpos(string 文字列, string 部分文字列) [PHP5]
「文字列」内で、「部分文字(単一文字でなければならない)」(PHP5では「部分文字列」)が最後に現れる位置を返す(大文字と小文字を区別します)関数です。
「部分文字/部分文字列」が存在しない場合は「FALSE」を返します。
「部分文字/部分文字列」が存在するか否かを調べたい場合、この関数が返す値が「0」の場合もあるため、「===演算子」を使って「if(mb_strrpos($str, $part) === FALSE){処理}」のように書くか、「is_numeric()」関数を使用して「if(is_numeric(mb_strrpos($str, $part))){処理}」と書く必要があります。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
この関数は「strrpos()」関数のマルチバイト文字対応版です。

以下にサンプル。

<?php
    $str = "寝ても覚めてもほでなすPHP";
    $part = "も";
    
    echo mb_strrpos($str, $part), "<br />";
    if( mb_strrpos($str, "あ") === false ){
        echo "not exists<br />";
    }
    if( is_numeric( mb_strrpos($str, "寝") ) ){
        echo "exists<br />";
    }
    
    #PHP5で有効
    if(substr(PHP_VERSION, 0, 1) >= 5){
        $str = "ほでなす管理人が送るほでなすサイエンス(?)";
        echo mb_strrpos($str, "ほでなす");
    }else
        echo "PHP", PHP_VERSION, " is not PHP5.";

    /*出力結果
    6
    not exists
    exists
    10
    */
?>

PageTop


文字列の一部を得る

mb_substr()関数
string mb_substr(string 文字列, int 開始位置[, int 長さ[, string エンコード]])
「文字列」内の、「開始位置」からの部分文字列を返す関数です。
「長さ」が指定されると、指定した長さだけの部分文字列を返します。
「開始位置」が負の値の場合は、「文字列」の最後の文字から数えた位置からになります(正確には「文字列」の長さ-「開始位置」からです)。
「長さ」が負の値の場合は、長さではなく「文字列」の最後の文字から数えた位置までの部分文字列を返します(正確には「文字列」の長さ-「長さ」の手前までです)。
返す文字列が無い場合は「空文字列」を返します。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
この関数は「substr()」関数のマルチバイト文字対応版です。

以下にサンプル。

<?php
    $str = "寝ても覚めてもほでなすPHP";
    
    echo mb_substr($str, 0), "<br />";
    echo mb_substr($str, 14), "<br />";
    echo mb_substr($str, 3, 2), "<br />";
    echo mb_substr($str, -3), "<br />";
    echo mb_substr($str, -3, 2), "<br />";
    echo mb_substr($str, 3, -2), "<br />";
    echo mb_substr($str, -3, -2), "<br />";
    
    /*出力結果
    寝ても覚めてもほでなすPHP
    (「""」が返された)
    覚め
    PHP
    PH
    覚めてもほでなすP
    P
    */
?>

PageTop


部分文字列の出現回数を得る

mb_substr_count()関数
int substr_count(string 文字列, string 部分文字列[, string エンコード])
「文字列」中の「部分文字列」の出現回数を返す関数です。
「エンコード」が省略された場合のデフォルト値は内部文字エンコーディングです。
この関数は「substr_count()」関数のマルチバイト文字対応版です。

以下にサンプル。

<?php
    echo $str = str_repeat("ハッスル ", 6)."♪", "<br />";
    echo mb_substr_count($str, "ハッスル"), " ハッスル";
    
    /*出力結果
    ハッスル ハッスル ハッスル ハッスル ハッスル ハッスル ♪
    6 ハッスル
    */
?>

PageTop


作成日:2004年06月13日 最終更新日:2004年12月16日
【通常モード で表示】