[PHP-users 1976] Re: シングルバイト文字とマルチバイト文字の分割

Osamu Shigematsu php-users@php.gr.jp
Tue, 11 Sep 2001 11:42:25 +0900


重松です。ゴメンなさい、書きかけで送ってしまいました。

アイデアだけですが、

(1) JIS に変換して、explode()。
    必ず奇数番目に日本語 (ただし JIS でエスケープシーケンスが欠落したもの)
がはいる。2 バイト文字で終わる場合には、最後に空の要素ができる。

    $txt = 'JIS のテキストです。'; // JIS で!!
    $tok = split('漢字IN|漢字OUTのエスケープシーケンス',$txt);

(2) mbereg() を使う。

    $txt = '日本語と alphabet の混在した text です。';
    $tok = array();
    while(!$txt){
        if(mbereg('^([1バイトの範囲の文字]+)([^1バイトの範囲の文
字]+)',$buf)){
            // 混在している
            $tok[] = $buf[1];
            $tok[] = $buf[2];
            $txt = substr($txt,strlen($buf[0]);
        }else{
            // 混在していない
            // 必ず奇数番目の要素にマルチバイト文字が欲しいなら...
            if(!count($tok))
                $tok[] = ''; // マルチバイト文字から始まる
            $tok[] = $txt;
            $txt = '';
        }
   }

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp